2014年4月1日火曜日

event MPM と worker MPM の比較まとめ

(1) CPU使用率の比較

event MPM > worekr MPM
event MPMではsystem + user で90%以上の値になっている(Keep-Alive有効の方がやや高い)。
worker MPMの場合は、Keep-Alive無効で60%程度、KeepAlive有効だと更に低く50%程度になる。
リクエストの処理件数の違いが現われているんだろう。


Keep-Alive無効 Keep-Alive有効
event MPM worker MPM event MPM worker MPM
%user 36.56 24.19 42.74 23.42
%nice 0.00 0.00 0.00 0.00
%system 53.04 37.66 51.03 25.28
%iowait 0.34 0.27 0.14 0.15
%steal 0.00 0.00 0.00 0.00
%idle 10.06 37.88 6.09 51.14

メモ

そもそも、Keep-Alive有効な状態で、worker MPMがリクエストをどう処理したのか。
今回の設定では、MaxKeepAliveRequestsは指定していない。
したがってデフォルトの100になっている。
100リクエストの処理が終わると、接続が切られ、次のコネクションがworkerスレッドを割り当てられるといった順序で処理が行われていったのだろう。
アクセスログに %k (この接続でのKeep-Aliveなリクエスト処理数) を追加して、値を確認してみると、確かに、100より大きな値は見られなかった。


(2) リクエスト処理数の比較

abでの1秒あたりのリクエストの処理数はKeep-Alive有効、無効いずれの場合もevent MPMの方が優位だった。


(<table>タグがなぜかうまく使えなかったので、絵にした)

ただし、event MPM(Keep-Alive有効)の場合は、リクエストエラーが発生した。
また、残念ながらネットワーク(100Mbps)的にもこのあたりが限界だった。

Keep-Aliveが無効なら、worker MPMとevent MPMで処理に違いがあるとは思わなかったが、実際には差が生じている。workerスレッド数以上に接続を保持できる構成や、ソケットのシャットダウン処理の非同期化が効果を上げているのだろうか。


念のため httperfを用いて固定レートでの負荷をかけてCPU使用率の比較を行った。
これは次回。


(2014/4/3) CPU使用率の比較に表を追加

0 件のコメント:

コメントを投稿