高負荷なのに片方のサーバにだけ余裕が……なぜ?(1/4)

すごいデバッグ能力。すごい技術力ですね。APサーバの負荷が2台で均等にならない点に着目してデバッグしていったらmod_jkのロードバランシングの設定でなっていたとのこと。

このシステムは大規模なものだったため、クライアント数を徐々に増やし、高い負荷を掛けて検証を進めました。クライアント数を1万5000にまで増やしたところ、一見正常に動作するように見えながら、よくよく確認すると、エラーは出ていないものの、2つのアプリケーションサーバでCPU使用率に差が生じる結果になりました。

データベース処理待ちが発生した時間帯は「0:13」でした。数値として見ればわずか1%ですが、偏りが一番大きくなっています。ここまでの調査から、以下のような自体が発生していると判断しました。

1. アクセス数が多くなると、わずかな誤差でも全体として差が大きくなるため、どちらか片方のアプリケーションサーバでデータベース処理待ちのスレッドが発生する

2. データベース処理待ちのスレッドが発生すると、リクエストの処理時間が長くなり、スレッド使用状況に差が生じる

3. 残っているスレッドがメモリを圧迫し、GC回数が増えてCPU使用率が高くなる

4. その後もmod_jkはほぼ均等にリクエストを送り続けるため、一度負荷の高くなったアプリケーションサーバともう1つのサーバとの間で、徐々にその差が大きくなってしまう

ちょっと気になったのが、http://ultramonkey.jp/ってドメインはつかっちゃーだめじゃないかなぁ・・・

[登録者名] ヴィーエー・リナックス・システムズ・ジャパン 株式会社
[Registrant] VA Linux Systems Japan

screenshot