さくら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のチューニング
- とても参考になりました。ありがとうございました。
投稿者紹介
-
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。
最近のエントリ
- レポート2019.10.28ユニキャストレストランを開催しました🍳
- レポート2019.08.29社内研修ワークショップ~マシュマロ・チャレンジ~
- レポート2019.08.06Computex/InnoVEX 出展者・通訳として参加してきました。
- レポート2018.06.12Computex 2018 レポート