忍者ブログ

Wordpressメモとかアフィめもとか

Wordpress,PHP,アフィリエイトとかの個人メモを記録していくよ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

lolipopでMySQL server has gone away

以下のような処理を作った。

・ファイルを読み込む(IN)。
・ファイルの内容を選別して、必要行だけ取り出す(OUT)。
・テーブルにINとOUTの件数を書き込む

この処理を実行していたところ、2ファイル目の書き込みでMySQL server has gone awayのエラーが。
lolipopのMySQLサーバのtimeout時間を見てみたら15秒。。。。
2件目のファイル処理に15秒以上かかっていたのでtimeoutしたため、コネクションが切れていたという落ち。
なので、1ファイルずつ繋いでは切るの繰り返しになった。。。

拍手[0回]

PR

lolipop の cronとか

lolipopでSSHログインし、perlなどのスクリプト実行時に負荷が高いと?プロセスがkillされる。

たとえば、ファイル100万件を読んで吐き出すだけのスクリプトとか。

で、このkillされる条件が良くわからないので色々やってみた。

case1
単純に100万件くらいを呼んで出す。

while(my $line = <IN>){

  ...
途中でkillされる

case2
case1のwhileループの中にselect(4引数のほうね)を使ってsleepさせながら実行。
時間によるけど成功する。sleepだと1秒未満が指定できないので、selectつかった

while(my $line = <IN>){
  select(undef, undef, undef, 0.000005);
  ...

成功


ただし、これをcronから実行させると共に失敗する。
失敗するのは開始からきっかり5分。

おそらく、cronから実行されるジョブは負荷に関係なく経過時間でkillされている。

case3
以下のスクリプトを手動で実行。
[test.pl]
#!/usr/bin/perl
use strict;
use warnings;
my $i;

print "start";
for($i = 0; $i < 361; $i++ ){
  sleep(1);
  if( ( $i % 30 ) == 0){
    # 30秒ごとにログ出す
    outlog($i); # yyyy/mm/dd hh24:mi:ss filename msgのフォーマットでログ出してる自作関数
  }
print "end";
}exit;
実行結果
2012/10/19 20:07:19 : # test.pl start
2012/10/19 20:07:20 : # test.pl 0
2012/10/19 20:07:50 : # test.pl 30
2012/10/19 20:08:20 : # test.pl 60
2012/10/19 20:08:50 : # test.pl 90
2012/10/19 20:09:20 : # test.pl 120
2012/10/19 20:09:50 : # test.pl 150
2012/10/19 20:10:20 : # test.pl 180
2012/10/19 20:10:50 : # test.pl 210
2012/10/19 20:11:20 : # test.pl 240
2012/10/19 20:11:50 : # test.pl 270
2012/10/19 20:12:20 : # test.pl 300
2012/10/19 20:12:50 : # test.pl 330
2012/10/19 20:13:20 : # test.pl 360
2012/10/19 20:13:20 : # test.pl end

→成功

ところが、上記の[test.pl]をlolipopのcronから実行すると

2012/10/19 20:17:01 : # test.pl start
2012/10/19 20:17:02 : # test.pl 0
2012/10/19 20:17:32 : # test.pl 30
2012/10/19 20:18:02 : # test.pl 60
2012/10/19 20:18:32 : # test.pl 90
2012/10/19 20:19:02 : # test.pl 120
2012/10/19 20:19:32 : # test.pl 150
2012/10/19 20:20:02 : # test.pl 180
2012/10/19 20:20:32 : # test.pl 210
2012/10/19 20:21:02 : # test.pl 240
2012/10/19 20:21:33 : # test.pl 270
2012/10/19 20:22:03 : # test.pl 300
5分後のログが最後になってる。
 
まとめ?
  • スクリプト手動実行時は負荷が高いものはその時点でkillされる
  • cronから実行すると、負荷に係らず開始から5分でkillされる

バッチプログラム作りにくいね。。。
cronから実行されるスクリプトからさらに子プロセスを呼び出して、親は終了するのならいけるんだろうか。。。

拍手[0回]

lolipopでLOAD INFILE

テキストデータをDBに流し込みたかったのでperlで動的にLOAD INFILEを作って複数のテキストファイルをロードしていたらmysqlのbinlogが大量に出てしまい、警告がきたと言うお話。
100万件弱くらいなのに、、、。

lolipopでmysqlを使えるプランでもsuper権限が無いので、LOAD INFILEするときだけ、binlogをoffにする事もできず、、、。
データベースサーバのデータディレクトリが触れるならストレージエンジンをCSVにするって言う手もあるのかもしれないけど、データディレクトリも触れず。

該当処理は毎回TruncateしてImportなのでbinlog取る意味が無いんだよね。どうしたものか。
仕方が無いので、perl側でtextファイルの必要なレコードだけ読み出すという処理にしたら、それはそれで負荷が高いらしく、プロセスがkillされてしまう。。。

困った。


拍手[0回]

lolipop用にTeratermで自動ログイン

自動ログインするのはTeratermのマクロを使う。

マクロファイルの作成

場所はどこでもOKなので lolipop.ttlというファイルを作る。
(今回はC:\Program Files (x86)\teraterm\に作った。ファイル名は何でもOK拡張子はttl)
lolipop.ttlに以下を記述

HOSTADDR = 'ホスト名'
USERNAME = 'ユーザ名'
PASSWORD = 'パスワード'
 
COMMAND = HOSTADDR
strconcat COMMAND ':2222 /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME 
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD
 
connect COMMAND
 
if result<>2 then 
messagebox ‘It could not be connected.’ ‘Connection Error’ 
end 
endif
Teratermのショートカットのプロパティにあるリンク先を修正(マクロファイルを引数に)

"C:\Program Files (x86)\teraterm\ttermpro.exe"

"C:\Program Files (x86)\teraterm\ttermpro.exe" /M="C:\Program Files (x86)\teraterm\lolipop.ttl"
 

lolipop.ttlは平文なので注意!

ロリポップをtelnet(SSH)で接続してコマンドを叩いて使うときの備忘録を参考にした。

拍手[0回]

lolipopのSSHからmysqlへログイン

ロリポップのSSHからmysqlへログインする方法

mysql -u ユーザ名 -h ホスト名 -p


ホスト名を指定しないとSSHサーバを見に行っちゃうので。。
ホスト名はmysqlnnn.phy.lolipop.jp

nnnはそれぞれ


拍手[2回]

ブログ内検索

最新コメント

広告

プロフィール

なんとなくはじめてみたよ

忍者ツールズプロフィールは終了しました

カウンター