webサーバのチューニングのポイントをまとめておきます。
TIME_WAIT待機時間を短くする
アクセスが多いシステムだと、ソケットの開放が追い付かなくなって
ポートを使いきってしまいます。
⇒特にKeep Alive OFFのwebサーバなど
net.ipv4.tcp_fin_timeout
の値になります。(単位は秒)
オンラインで変更する場合、sysctlを使って調整します。
設定値の表示
# sysctl -a
設定値の書き換え# sysctl -w net.ipv4.tcp_fin_timeout=30
# sysctl -w net.ipv4.tcp_tw_reuse=1
# sysctl -w net.ipv4.tcp_tw_recycle=0
# sysctl -w net.ipv4.tcp_tw_reuse=1
# sysctl -w net.ipv4.tcp_tw_recycle=0
↑なんか勘違いしていた可能性があるので修正。現状では大きな問題は起きていないですが、tcp_tw_recycleはNATで問題が起きることがあるようなので最終手段です。
@2008/12/11追記
↑tcp_tw_recycleを1にすると問題が多くて地雷祭りなので、基本0にしておきます。
@2010/10/29追記
いまさらですけど、tcp_fin_timeoutはtime_waitの数と関係ありません(60秒でハードコードされているとのこと)。tcp_fin_timeoutが関係あるのはFIN_WAIT_2の数で、FIN_WAIT_2が多い場合はtcp_fin_timeoutを短くすると改善するかもしれません。
また、起動時に設定されるように
/etc/sysctl.conf
を編集して設定しておきましょう。
参考図書
CLOSE_WAIT待機時間を短くする
apache設定ファイルのTimeout値を小さくすることで調整します。ただし、ファイルアップロードやMTの再構築のような時間のかかる処理のときに
タイムアウトになる可能性もあるので要注意です。
同時接続数を多くする
apache設定ファイルのMaxClients値とServerLimit値を大きくすることで調整します。/etc/httpd/conf/httpd.confか、ソースインストールの場合はconf/extra/httpd-mpm.confに
設定があると思います。
また、伴ってファイルディスクリプタや、ユーザあたりの起動プロセスの上限を引き上げる必要があります。
CentOSの場合、
/etc/security/limits.conf
に設定を記載します。
apache soft nofile 12288
apache hard nofile 12288
apache soft nproc 4096
apache hard nproc 4096
apache hard nofile 12288
apache soft nproc 4096
apache hard nproc 4096
※システム上限値よりも大きくは設定できません
システム上限値
# sysctl fs.file-max
システム上限値は、上の項目と同様にsysctlコマンド・/etc/sysctl.confファイルで設定しましょうログ出力を抑止する
apache設定ファイルのSetEnvIfもしくはSetEnvIfNoCaseを利用して、ログ出力を抑止してディスクI/O削減を図ります。SetEnvIf Request_URI "\.(gif)|(jpg)|(jpeg)|(png)|(swf)$" no_log
CustomLog logs/access.log combined env=!no_log
CustomLog logs/access.log combined env=!no_log