2011-08-04
さくらレンタルサーバーでバッチをkillされたくなければ高負荷な時間を短くせよ。
すごいあたり前のことを書くのですが、この結論に至るまでに色々試して、さくらのレンタルサーバ
で重い処理を流した時の挙動なんかも見えてきましたので、そのあたりを書きます。
前段
えー、共用レンタルサーバーを借りていると、重くて時間のかかるバッチ処理は強制的にKillされます。
僕がさくらレンタルサーバーで動かしてるwebサービス「#よろしくたのみますよ」*1でも、一日一回動くバッチ処理があって、開発中にそれがことごとくKillされてしまった。
その処理は、登録されてる誕生日をチェックして、1週間後ならtweetするということをやる。流れはこんな感じ。
- DBから、誕生日が今から1週間後のユーザーを取得する。(以下は取得したユーザーごとに)
- ユーザーのほしい物リストをスクレイピングして、ほしい物リストにある商品のタイトルをすべて取得する。
- Twitter APIから、ユーザーのfollowersとfriendsを最大2000人ずつ取得して、両方のリストにあるユーザーをランダムで100人取得する。
- 上記データを使って、ほしい物のタイトルとほしい物リストのURLをtweetする。
- ユーザーがmention付きでつぶやく設定にしていたら、3.で取得したユーザーへのmentionも含めてつぶやく。
- 複数名まとめてつぶやく
- 一度つぶやいてから次につぶやくまで10秒間隔を空ける。
- tweetの内容は「#よろしくたのみますよ」で見てみてください。
- ユーザーがmention付きでつぶやく設定にしていたら、3.で取得したユーザーへのmentionも含めてつぶやく。
このうち2,3が重い処理で、4.は軽いけどたくさんつぶやく場合は時間がかかる。
何回かテストしたけど、2/3ぐらいの確率で3.の処理中にkillされた。
運良く4まで動いても、そこで確実にkillされた。
ちなみに2.の処理は30秒くらい、3.の処理は50秒くらいかかっている。
さくらさんに問い合わせたところ
さくらのレンタルサーバではサーバの負荷対策のため、一定以上のメモリを 使用しているプロセスや、一定時間以上起動し続けているプロセスは自動的に 強制終了を行うよう設定を行っております。
そして具体的な数値は非公開とのこと。じゃあ試してみんとわからんな!
試行錯誤
どんな条件でkillされるかわからないから、いろいろ試して条件を探ってみた。
- もしかして処理時間が長いと全部killされるんじゃないか
- テスト1:1秒ごとにechoで数字を吐くバッチを動かしてみる。
- 結果:見事5分間完走。パチパチパチ。
- テスト2:4.の処理だけ単独で動かしてみる。sleepの時間も伸ばして。
- 結果:8時間かけて処理完走。
- 結論:処理時間の長さだけではkillされない。
- テスト1:1秒ごとにechoで数字を吐くバッチを動かしてみる。
- 一時的にでも負荷の高くなるプロセスが、一定時間以上動作するとkillされるのではないか。
- テスト:2,3の処理を、それぞれ単独で実行
- 結果:2.の処理は1/2くらいの確率でkillされた。処理開始からkillされるまでの時間は最短で25秒。3.の処理は100%完走。
- テスト:2,3の処理を、それぞれ単独で実行
- 2.の処理でメモリを食い過ぎてるんじゃないか
- 2.の処理の負荷が高すぎるんじゃないか
ここまでのテストで、ある程度高負荷な状態が一定時間以上続いたらkillされるのではないか、という仮説を得た。
あと高負荷な状態を短くすることで、長いバッチも動かせるようになった。よかった。
結論
こんなことで苦労するならさくらのVPS
借りたほうがいい。
あと「#よろしくたのみますよ」をよろしくたのみますよ。
トラックバック - http://d.hatena.ne.jp/hsksnote/20110804/1312470316
リンク元
- 23 http://www.google.co.jp/url?sa=t&rct=j&q=さくらレンタルサーバ ユーザ負荷&source=web&cd=5&ved=0CEsQFjAE&url=http://d.hatena.ne.jp/hsksn
- 12 http://www.google.co.jp/url?sa=t&rct=j&q=レンタルサーバー twitter 負荷&source=web&cd=1&ved=0CEUQFjAA&url=http://d.hatena.ne.jp/hsksnote/20110804/1312470316&ei=9tC_
- 11 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cts=1331188614253&ved=0CIIBEBYwAA&url=http://d.hatena.ne.jp/hsksnote/20110804/1312470316&ctbs=lr:lang_1ja&ei=FVRYT_T1G8WOmQWz2_26Dw&usg=AFQjCNG1IJk-2EYZ_5BH17kuAQ29uN7P8w&sig2=
- 4 http://d.hatena.ne.jp//hsksnote//20110807//1312685462
- 4 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CD8QFjAB&url=http://d.hatena.ne.jp/hsksnote/20110804/1312470316&ei=6QFpT5vlK8z4mAWbntmHCQ&usg=AFQjCNG1IJk-2EYZ_5BH17kuAQ29uN7P8w&sig2=vzTmbGPbKekisxQhwLh5rQ
- 4 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0CEUQFjAD&url=http://d.hatena.ne.jp/hsksnote/20110804/1312470316&ei=LbZmT6CXO8WiiAfNsojSBQ&usg=AFQjCNG1IJk-2EYZ_5BH17kuAQ29uN7P8w
- 3 http://d.hatena.ne.jp/
- 3 http://htn.to/S9wJvK
- 3 http://www.google.co.jp/hws/search?hl=ja&client=fenrir&channel=&adsafe=off&safe=off&q=バッチ+秒ごと&lr=lang_ja
- 3 http://www.google.co.jp/url?sa=t&rct=j&q=%E3%81%95%E3%81%8F%E3%82%89+%E3%83%AC%E3%83%B3%E3%82%BF%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90+kill&source=web&cd=1&ved=0CDcQFjAA&url=http://d.hate
