ApahceのCPU利用率、ロードアベレージを下げる効果的な方法を教えてください。
現在の環境は以下のようになっています。
Apacheのバージョン 2.0.61
configureオプション
"./configure" \
"--enable-so" \
"--enable-shared" \
"--with-mpm=worker" \
"--enable-deflate" \
"--enable-headers" \
"--enable-ssl" \
"--enable-lib64" \
MPMはworkerにしています。
GIGAZINEさんところのチューニング方法とかは、参考になりますか?
http://gigazine.net/index.php?/news/comments/20060601_loadavarag...
細かなところでは、スタイルシートをHTML埋め込み型から、外部スタイルシートにするという、ちょっとしたことも効果があるって聞いたことがあります。2回目以降は、サーバからダウンロードしなくても、キャッシュから表示されるようになりますので。
具体的にボトルネックになっているリソースはどこまで調べていますか?
Linuxだと
vmstat
iostat
sar
などのコマンドで調べることができます。
また、mod_statusでリクエストの処理状況を見れたり、
httpd.confのcustom_logで処理時間を出す事ができます。
特定のリクエストが問題になっていないか調べてみてください。
あとはハードウェア構成、具体的な環境(言語、DB、リクエスト数)などもあったほうが判断ができると思います。
例えば、NFS使っていてそこが問題だったりもしますので。
ロードアベレージが高いのでCPUがボトルネックだと思ったのですが・・・
少しでも負荷を下げたいです。
ハードウェア構成はサーバ1台でスペックは以下のとおりです。
1.8GHz デュアルコア AMD Opteron 2210
メモリ 4GB
HDD 150GB
環境は以下のような感じです。
OS RedHatEnterpriseLinux5
PHP 4.4.7
PostgreSQL 8.2.5
80番ポートへのコネクション数 100程度
NFSは使っていません
mod_statusで見た状況は
Waiting for Connectionが60程度
Sending Replyが5
Keepalive (read)が1
Reading Requestが1
Closing connectionが1
です。
KeepAliveTimeout 1
maxClients 200
に設定してみましたが、今のところ大きな変化はありません。
コードは変更できませんので、設定のみでなんとかしたいです。
free -mでメモリの状況をみたところ、-/+ buffers/cache:のfreeが2358でした。
なので、メモリは余っている感じです。