[Slicehost] Ubuntuサーバーの高速化1 – Apacheチューニング

2008.07.28

画像 - [Slicehost] Ubuntuサーバーの高速化1 – Apacheチューニング

少ないメモリ(258m)でも安定動作・高速動作するためにApacheの設定を見直しました。

Slicehostでの運用もしばらく経ちましたが、最初は頻繁にapacheが停止したりCPU値が100%超えてOOMキラーが発生したりしましたが、高速化、コストパフォーマンスを考えて設定を見直ししました。驚くほど動作が安定しています。

Rubyのインスタンスは正直まだ実運用は難しいレベルですが、需要があったとき考えます:-p

Apacheのチューニング

参考リンク

Apacheの設定を見直す

/etc/apache2/apache2.conf

KeepAlive On

KeepAliveを利用して1つの接続を使い回し、複数のリクエストに応えられるようにします。

MaxKeepAliveRequests 100

1つのKeepAliveが、開始から切断までに受け付けるリクエスト数を設定。推奨:1ページ当たりの平均的なファイル数+αを数値とする。

KeepAliveTimeout 15

KeepAliveで接続が維持されつづけると、効率が落ちるので一定時間で切断するための時間設定。

リソースの確保のため、小さい数値にする。

Timeout 45

処理タイムアウト時間。 若干短くしている。

prefork MPM の設定

Apache 2.0はマルチスレッドに対応し、1.0のプロセス処理からパフォーマンスを向上しましたが、PHPではマルチスレッドプロセスのworker MPMを使うことは推奨されていません(デフォルトもprefork)。

デフォルト設定

<IfModule mpm_prefork_module>
 MinSpareServers 10
 MaxSpareServers 10
 StartServers 10
 MaxClients 50
 MaxRequestsPerChild 50
</IfModule>

StartServers

Apache起動時のサーバプロセスの数。MinSpareServers と同一の値を設定する。

MaxSpareServers

待機させておくhttpdの最大数。Apacheは定期的に監視してこの値を上回っていた場合は自動的にhttpdを停止する。

MaxClients

MaxClients * Apacheの1プロセスが使用するメモリ < 使用可能なメモリ

使用可能なメモリを計算するのは複雑なので、OSメモリの90%位を目安にしてます。

プロセスの消費メモリを計算

TOP

Mでメモリ使用順に並べ替え

topで上位からの一部分

PID USER PR NI VIRT RES SHR S CPU MEM TIME COMMAND
———————————————————————————————
8131 www-data 15 0 269m 36m 23m S 0 14.4 0:00.69 apache2
8134 www-data 15 0 269m 27m 14m S 0 10.7 0:01.13 apache2
8136 www-data 15 0 269m 27m 14m S 0 10.7 0:01.14 apache2
8128 www-data 15 0 269m 27m 14m S 0 10.6 0:01.31 apache2
8127 www-data 15 0 269m 27m 14m S 0 10.6 0:00.80 apache2
8142 www-data 15 0 269m 27m 14m S 0 10.6 0:00.42 apache2
8144 www-data 15 0 269m 27m 13m S 0 10.6 0:00.73 apache2
8140 www-data 15 0 269m 26m 13m S 0 10.5 0:00.43 apache2
8138 www-data 15 0 269m 25m 12m S 0 10.1 0:00.43 apache2
8146 www-data 15 0 269m 25m 12m S 0 10.0 0:00.21 apache2

平均化したプロセス使用メモリを求める

RES(物理メモリ) – SHR(共有メモリ)で一つのプロセスが使用するメモリを求める

プロセス使用メモリ(15m) / Apacheプロセス数 = 平均プロセス使用メモリ

平均的に10m~15m位になるんじゃないかと思います。

MaxClientsの値

{物理メモリ(258m)*0.9}(232m) ÷ 平均プロセス使用メモリ(15m) ≒ MaxClients (15)

なるべく高い数値にすればクライアントの要求に応えられますが、高い値にし過ぎると、メモリを使い切りスワップが発生します。

MaxRequestsPerChild

ここで指定した数のリクエストを処理すると再起動します。Apache側で使い回しているプロセスを定期的に再起動させることで、メモリリークを防ぐことができます。

なるべく大きい数を指定します。0だと再起動しません。

修正したMPMの設定

<IfModule mpm_prefork_module>
    StartServers          3
    MinSpareServers       3
    MaxSpareServers      13
    MaxClients           15
    MaxRequestsPerChild  4000
</IfModule>

Recommend!

PHPによるWebアプリケーションスーパーサンプル 第2版 PHPによるWebアプリケーションスーパーサンプル活用編 第2版 jQueryで作る Ajaxアプリケーション CakePHPガイドブック CakePHP ポケットリファレンス

TrackBack URL
このエントリのリンクを作成
Comment Form

スタイル指定用の一部の HTMLタグが使用できます。