メニュー

Apache(httpd)のプロセス数をチューニングしてベンチマークをとってみた。

170406_blog
どうも、開発2部サーバー担当の山本です。

オーツーでは各セクションで情報共有や全体的なスキルアップを目的とした勉強会を定期的に行っています。
今回は先日のサーバー勉強会で発表したApache(httpd)のプロセス数のチューニングについて紹介します。

ApacheはゲームのAPIサーバーを構築する上で定番のミドルウェアですが、適切なチューニングはできていますか?
CPUやメモリなどのリソース不足でパフォーマンスを十分に発揮できていなかったり、逆にリソースが余りすぎてインフラコストが無駄になっていたりしませんか?

チューニングの必要性と今回の目的

Apacheのチューニングは「パフォーマンスの向上」「インフラコストの最適化」を行う上で重要な要素になります。
今回の記事ではプロセス数とCPUを調整し、ボトルネックを探りながらベンチマークをとってみたので、「Apacheのチューニングってどうするんだろう?」という方の足掛かりになればと思います。

環境

  • CentOS 7.1(Virtual Box)
  • Apahce 2.4(MPMはprefork)
  • PHP 7.1

ホストマシンからJMeterを使って簡単なPHPのページを20同時接続の1000回ループでアクセスして、スループット(単位時間当たりの処理性能)を計測します。

初めはCPU1つでApacheのプロセスを増やしていき、次にCPUを4つに変えて同じ計測を行います。

Apacheのプロセス数はhttpd.confを以下のようにStart、Min、Maxを揃えてforkが発生しないようにしています。
MaxConnectionsPerChildはプロセスがkillされるまでのリクエスト数で、これを0にしているのは計測中にforkを発生させないためですが、実際のサービスではメモリリーク対策として設定しておくことをおすすめします。

StartServers           1
MinSpareServers        1
MaxSpareServers        1
ServerLimit            1
MaxRequestWorkers      1
MaxConnectionsPerChild 0

計測

CPU×1

プロセス数が1の場合
スループット:406.7rps
id(idle)がCPUの空きですが、負荷計測中のCPUにはまだ余裕がありました。

20170328_161346

プロセス数が10の場合
スループット:689.0rps
スループットはプロセス1個の場合に比べて1.7倍になりました。
負荷計測中のcpuはidleが0%になっています。

20170328_161956

プロセス数が20の場合
スループット:682.5rps
プロセス10個の時点でCPUが頭打ちしてるので、プロセスを20個にしてもスループットは伸びません。

20170328_162800

CPU×4

virtualboxの設定画面からプロセッサー数を1から4に変更します。

20170328_170517

プロセス数が1の場合
スループット:431.4rps
プロセス1つの場合、CPUが増えてもスループットはほとんど変わりません。
負荷計測中のCPUにはまだ余裕がありました。

20170328_171501

プロセス数が10の場合
スループット:1242.9rps
CPUが1つの時に比べて倍近くのスループットになりました。
CPUにはまだ幾分余裕があるように見えます。

20170328_174042

プロセス数が20の場合
スループット:1147.5rps
プロセス10個に比べてスループットが少し下がっています。
CPUはまだ余ってそうですが・・・

20170328_175628

実はこれVirtualBoxの動くホストマシンのCPUが限界になってます。

20170328_173900

このように負荷を与えられる側だけでなく、負荷を与える側のリソースにも注意が必要です。
サービスで負荷試験を実施する際にはこのようなことが無いよう、1台で無理なら複数のサーバーのjmeterから負荷を掛けましょう。
jmeter-serverを使えば複数台のサーバーを使った負荷試験をしやすいのでおすすめです。

まとめ

計測した6パターンのスループット(rps)を表にまとめました。

CPU Apacheのプロセス数
1 10 20
1 406.7 689.0 682.5
4 431.4 1242.9 1147.5※

(※)ホストマシンを分ければもっと数字が上がりそうですが、今回は未計測です。

最初はプロセス数がボトルネックになっていたのが、CPUがボトルネックに変わったのが分かるかと思います。
今回はプロセス数とCPUにフォーカスしましたが、実際にはメモリ、ストレージ、ネットワークなどなど様々な要素が絡んできます。
このようにボトルネックを見つけて対応する力はApacheに限ったことではなく、負荷試験や負荷軽減対策でとても重要になるので、いざ任せられた時に対応できるよう実践するなどして理解を深めておきましょう!

でわでわ。

この記事をシェアする

  • twitter
  • facebook
  • Google+
  • B!はてブ
  • pocket
トップへ戻る

CONTACT

ゲーム開発、Webサイト制作に関するご相談等ございましたら、お気軽にお問い合わせください。

ゲーム開発に関する
お問い合わせはこちら

Webサイト制作に関する
お問い合わせはこちら