May 28, 2008
今抱えている問題。まだ調査中。
セミッターをやっていて発覚したのだが、どうもモバツイのサーバは現状の負荷がギリギリらしい?!
先日AMNのブログ勉強会をセミッターで流していたら、書込フレームが更新できなくなって、同サーバで運用しているF's Garageにもページが表示できないなどの影響がでていたようだ。
よくわからないのが、セミッターを止めた後でもエラーが続いていたこと。ひたすらapacheの再起動などをやっていたのだが、1〜2時間調子が悪かった。
なのでセミッターは気がつく引き金で、実質的にはモバツイの負荷の方がエラーの原因になっているように思える。
PC+横取り丸で見ると、エラーレスポンスなどは一切返っていない。
ので、現状、このエラーが適切に捕捉できていない。
で、これと同じ現象とは言えないが、Apcheのエラーログにセグメンテーションフォルトのエラーが表示されているようだ。
[Wed May 28 07:38:18 2008] [notice] child pid 7326 exit signal Segmentation fault (11)
回数にして1分に1〜3回程度の頻度。連発するときは1分以内に10回ぐらい出ることもある。
URLは複数。共通処理にエラーの引き金があるのか、負荷が高いから起きるのかは謎。
PHPの方で、実行中のプログラムの先頭でプロセスIDをログに出力するようにして、apacheのアクセスログと照らし合わせてみた。
eoLog::log( date("Y.m.d H:i:s"). " " . $_SERVER['REQUEST_URI']." " . posix_getpid());
このリクエストのURLをapacheのログに照らし合わせると、どうやら問題なさげに200 OKが返っているようだ。
またセグメンテーションフォルトのログと、PHPのログの間には10秒から15秒以内のラグがある。
そう考えると、セミッターで経験した「レスポンスが一切返らない」状態とは違うようにも思える。
さらにapacheログで追うと、比較的同じユーザーが前後10秒以内に別のページにリクエストしていることから、
仮説1.エラーが返ったので、すぐリロードしたり元の画面に戻った。
仮説2.このページのレスポンスが返る前に、別のページに移動したことでセグメンテーションフォルトのエラーが発生した?!
PHPのセグメンテーションフォルトについて調べると、携帯サイトではまっている情報がよく見つかる。改善案が今ひとつわからないまま...
セグフォルトについて現在わかってないのが、
・このセグメンテーションフォルトに遭遇したユーザーは、セミッターと同じように「何も表示されない」という状態になっているのだろうか?
・確かに502エラーが出ているという報告は聞く。そんなエラーは一切、apacheログには出ていない。セグメンテーションフォルトとの関連性は?!
携帯ゲートウエイに何もデータを返さなければ、200 OKでも携帯ゲートウエイ側で502になるのかな・・・。もしくは、なにがしかの理由で処理が遅延したから、携帯ゲートウエイ側でタイムアウトしている可能性もある。
ということで、セグメンテーションフォルトと、セミッターで起きた画面真っ白の関連性が見えていないわけだが、セグメンテーションフォルトのエラーは目の前で起きているというところで困惑している状況。
誰か是非アドバイスを....
とりあえず現状のhttpd.confの設定
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 200
MaxClients 200
MaxRequestsPerChild 0
/server-statusの処理中リクエスト数は、いいとこ20requestぐらいだから、負荷的には全然大丈夫だとは思う。
15 requests currently being processed, 11 idle workers
MaxRequestsPerChildは最初設定してたけど、セミッターで安定しなくなった後に、この値を0にしたら落ち着いたので、とりあえずそのままにしています。
対処としては、PHPのバージョンアップ(今は5.2.4)で直らないか?ってのと、PHPにデバッガーを入れて、より深いところの調査を考えています・・・。
##いい加減、twitter本家のモバイル版の国内対応版出ないのかのう。それで解決するように思えるのだが。
-------------------------------------------
追記:
twitter経由でアドバイスをいただいて、アクセラレータとして入れているAPCを最新版(3.0.19)に上げたらセグメンテーションフォルトのエラーが一切なくなったもよう。
しかも、今まで以上にモバツイが軽くなったような気がします(除くtwitterとの通信部)
zukuさんありがとうございました!!
セミッターのログキャッシュも、CacheLiteからAPCのメモリキャッシュ(memcachedみたいなもの)に変えたので、事態の改善を期待しています。