CentOS7 Apacheチューニング

スポンサーリンク

■Webサーバのチューニング

仮想サーバで動かすのが一般的となりつつある昨今で、大規模なWebサーバを運用するとなった場合にリソースを追加してあげればそれなりに強固なWebサーバになりますが、ソフトウェアのチューニングも効果を発揮します。

まず以下のコマンドでWebサーバ(apache)をインストールします。

# yum install httpd httpd-tools
# rpm -qa httpd
httpd-2.4.6-80.el7.centos.1.x86_64
httpd-tools-2.4.6-80.el7.centos.1.x86_64

チューニングを行う際にコア部分となるのがMPM(Multi Processing Module)と呼ばれるものであり、クライアントからのリクエストをApacheがどのように処理するかをモジュール化したものです。

デフォルトのMPMはpreforkと呼ばれるモジュールで、以下のコマンドで確認が可能です。

# apachectl -V
Server version: Apache/2.4.6 (CentOS)
Server built:   Jun 27 2018 13:48:59
Server's Module Magic Number: 20120211:24
Server loaded:  APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
<以下省略>

preforkを含め、MPMには以下のものがあります。

MPM
概要
prefork マルチスレッドではなくfork(コピー)を行いパフォーマンスを向上。
worker マルチスレッドとマルチプロセスのハイブリッド型。
event Apache2.4からサポート。マルチスレッドで動作する。

今回はデフォルトのpreforkをそのまま利用し、オプションの値を調整していきます。まず設定項目として以下のものがあげられます。

オプション
概要
デフォルト値 設定例
StartServers Apacheが起動した際のプロセス数 5 10
MinSpareServers 待機させておくプロセス起動の最小値 5 35
MaxSpareServers 待機させておくプロセス起動の最大値 10 70
ServerLimit 最大プロセス数 (MaxClinetsと同一) 256 256
MaxClients 最大同時リクエスト数 (ServerLimitと同一) 256 256
MaxRequestsPerChild 1プロセスが処理できる最大リクエスト数 10000 0 (無制限)

これを/etc/httpd/conf/httpd.confの最後に追記します。

# vi /etc/httpd/conf/httpd.conf

<IfModule mpm_prefork_module>
    StartServers 10
    MinSpareServers 35
    MaxSpareServers 70 
    ServerLimit 256
    MaxClients 256
    MaxRequestsPerChild 0
</IfModule>

これらの数字をどれぐらいに設定すれば良いのかというのは非常に難しいところなのですが最も重要なのはMaxClientsであり、膨大なアクセスが無い限りはデフォルトの256のままでOKです。MaxSpareServersはMaxClientsの10%~30%程度、MinSpareServersはMaxSpareServersの半分程度にするのが一般的です。

これでもなおアクセスに耐えきれなければ徐々に増やしていくという手順で良いと思うのですが、CPUやメモリ量などによってはサーバダウンの原因にもなるので慎重な調整が必要です。

■ベンチマークテスト


Webサーバの性能を測定するベンチマークツールとしてApacheではそのツールが同封されています。そのコマンドは「ab」というツールで気軽に試すことの出来るツールなので是非利用してください。使い方は以下となります。

# ab -n 1000 -c 100 http://localhost/ 
(-nは総リクエスト数,-cは同時リクエスト,上記は同時100アクセスを10回繰り返す挙動となる)
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software: Apache/2.4.6
Server Hostname: localhost
Server Port: 80

Document Path: /
Document Length: 10 bytes

Concurrency Level: 100
Time taken for tests: 0.143 seconds
Complete requests: 1000
Failed requests: 0 ※注目ポイント
Write errors: 0
Total transferred: 300000 bytes
HTML transferred: 10000 bytes
Requests per second: 7008.49 [#/sec] (mean) ※注目ポイント
Time per request: 14.268 [ms] (mean)
Time per request: 0.143 [ms] (mean, across all concurrent requests)
Transfer rate: 2053.27 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 4 1.3 4 6
Processing: 4 10 2.0 10 14
Waiting: 2 8 2.2 8 14
Total: 7 13 1.6 14 18

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

 

上記結果から注目すべき点は黒字で塗った部分です。Request per secondは1秒間あたりのリクエスト数で値が大きいほどパフォーマンスが良いということです。

また、最初の方に「Complete XXX Requests」と表示されていますが、ここでFailed Requestと表示されている場合、既に限界を越えてるということになります。 

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする