Apacheのパフォーマンスチューニング

Pocket

さくらVPSにWordPressを導入して数週間ですが、編集作業を継続して行っているとレスポンスがものすごい重くなることがありました。そのたびにApacheのサービスの再起動をかけていたのですが、上司にApacheのチューニングを勧められたため、調べてチューニングしてみました。

このブログは一日あたり自分も含めて100から200のリクエストを受けているようなので同時アクセス数は少ないと思われます。そのため、待機プロセス数上限で使用するメモリ使用量が搭載メモリ上限を超え、swapが頻発したものと考えました。

Apache Benchでの性能測定

httpd が起動した時点での残りの物理メモリは 400MB 程度でした。
この時点で ab で同時接続数 2 、 リクエスト回数 2 で 1 秒あたりに処理可能なリクエスト数を計測しました。

$ ab -n 2 -c 2 http://blog.pg1x.com/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking blog.pg1x.com (be patient).....done


Server Software:        Apache/2.2.3
Server Hostname:        blog.pg1x.com
Server Port:            80

Document Path:          /
Document Length:        94693 bytes

Concurrency Level:      2
Time taken for tests:   0.756128 seconds
Complete requests:      2
Failed requests:        0
Write errors:           0
Total transferred:      189818 bytes
HTML transferred:       189386 bytes
Requests per second:    2.65 [#/sec] (mean)
Time per request:       756.128 [ms] (mean)
Time per request:       378.064 [ms] (mean, across all concurrent requests)
Transfer rate:          244.67 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       26   26   1.0     27      27
Processing:   687  707  29.0    728     728
Waiting:      394  401  10.6    409     409
Total:        713  734  29.7    755     755

Percentage of the requests served within a certain time (ms)
  50%    755
  66%    755
  75%    755
  80%    755
  90%    755
  95%    755
  98%    755
  99%    755
 100%    755 (longest request)

1 秒間におよそ 3 リクエスト処理することができるようでした。
通常もこれだけ処理できるように目標を設定します。

httpd.conf の設定

プロセス関係

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c$gt;
StartServers       8
MinSpareServers    5
MaxSpareServers   10
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  100
</IfModule>

処理能力低下の原因のアタリはついていますので、

MaxSpareServers
上限プロセス数(少なめに設定)
MaxRequestsPerChild
1 プロセスあたりに許容されるリクエスト数(少なめに設定)

を設定しました。

ホスト名の逆引きをオフ

また、ログ記録時点のホスト名逆引きも無駄な負荷を増やすため以下の記述を追加しました。

HostNameLookups off

負荷を増やして再度 ab

$ ab -n 150 -c 2 http://blog.pg1x.com/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking blog.pg1x.com (be patient).....done


Server Software:        Apache/2.2.3
Server Hostname:        blog.pg1x.com
Server Port:            80

Document Path:          /
Document Length:        94759 bytes

Concurrency Level:      2
Time taken for tests:   51.223664 seconds
Complete requests:      150
Failed requests:        0
Write errors:           0
Total transferred:      14246250 bytes
HTML transferred:       14213850 bytes
Requests per second:    2.93 [#/sec] (mean)
Time per request:       682.982 [ms] (mean)
Time per request:       341.491 [ms] (mean, across all concurrent requests)
Transfer rate:          271.59 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       23   24   1.2     24      29
Processing:   538  654  64.9    648     873
Waiting:      271  354  45.3    348     489
Total:        561  678  64.9    673     896

Percentage of the requests served within a certain time (ms)
  50%    673
  66%    705
  75%    720
  80%    726
  90%    759
  95%    796
  98%    851
  99%    864
 100%    896 (longest request)

OKです。かなり快適にブログを編集、閲覧できるようになりました。

参考

Apacheのチューニング
とても参考になりました。ありがとうございました。

投稿者紹介

株式会社ユニキャスト
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください