検索
連載

httpd.confによるWebサーバの最適化実用 Apache 2.0運用・管理術(3)(3/3 ページ)

Webサーバのチューニングには、いくつかの段階がある。今回は、httpd.confの修正によるApacheの最適化について説明する。(編集部)

Share
Tweet
LINE
Hatena
前のページへ |       

スレッドの設定(worker MPM)

 前述したように、Apache 2.0のデフォルト設定はプロセスベースの処理になっているため、スレッドを使用するには設定の変更(第1回参照)が必要です

 以下がスレッド特有の設定です。

<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>
worker MPM(スレッドベース)を使用しているhttpd.confの一例

MinSpareThreads/MaxSpareThreads

 MinSpareServers/MaxSpareServersでは待機プロセスの起動個数範囲を設定しましたが、MinSpareThreads/MaxSpareThreadsでは待機スレッドの起動個数範囲を設定します。

MinSpareThreads     25
MaxSpareThreads     75

ThreadsPerChild

 ThreadsPerChildは、1つのプロセスで生成されるスレッド数を設定します。

ThreadsPerChild     25

 Windowsではプロセスが1つしかないため、この値を多くする必要があります。Linuxの場合は複数のプロセスを起動し、そのプロセスそれぞれにThreadsPerChild個のスレッドが生成されるため、Windowsほどの重要性はありません。

 最大スレッド数は、MaxClients数で決定されます。ServerLimitを設定する場合は、MaxClientsの値をThreadsPerChildの値で割った数値以上にします。つまり、最大スレッド数は、

MaxClients数=ThreadsPerChild数×プロセス数

となります。

編注:当初、最大スレッド数を

ThreadsPerChild数×MaxClients数

としておりましたが、これは誤りであったため、該当個所を修正させていただきました。お詫び申し上げます(2005年11月8日)。


プロセスの状態確認方法

プロセスの使用メモリ量を調べるには

 プロセス数の設定に際しては、Apacheのプロセスがサーバのリソースにどれだけ影響を与えるかを見極める必要があります。1プロセス当たりのメモリ使用量は、psコマンドやtopコマンドで調べられます。

 psコマンドでは、「VSZ」と「RSS」の値に注目します。VSZはプロセスの仮想メモリサイズ(kbytes単位)、RSSはプロセスが使用している物理(スワップされていない)メモリサイズ(kbytes単位)です。

# ps aux
USER     PID %CPU %MEM   VSZ   RSS TTY STAT START TIME COMMAND
root   27595 15.7  2.8 32712 14392 ?   Ss   20:20 0:00 /usr/sbin/httpd
apache 27599  0.0  2.8 32712 14404 ?   S    20:20 0:00 /usr/sbin/httpd
apache 27600  0.0  2.8 32712 14404 ?   S    20:20 0:00 /usr/sbin/httpd
apache 27601  0.0  2.8 32712 14404 ?   S    20:20 0:00 /usr/sbin/httpd
apache 27602  0.0  2.8 32712 14404 ?   S    20:20 0:00 /usr/sbin/httpd
apache 27603  0.0  2.8 32712 14404 ?   S    20:20 0:00 /usr/sbin/httpd
apache 27604  0.0  2.8 32712 14404 ?   S    20:20 0:00 /usr/sbin/httpd
apache 27605  0.0  2.8 32712 14404 ?   S    20:20 0:00 /usr/sbin/httpd
apache 27606  0.0  2.8 32712 14404 ?   S    20:20 0:00 /usr/sbin/httpd

 topコマンドの場合は、「VIRT」と「RES」の値に注目します。VIRTはプロセスの仮想メモリサイズ(kbytes単位)、RESはプロセスが使用している物理(スワップされていない)メモリサイズ(kbytes単位)です。topコマンドの場合、仮想メモリがサーバ全体でどの程度使用されているかも見ることができます。下の例では、1261092kbytesのうち、125552kbytesが使用されています。

# top
top - 20:22:04 up 1 day, 8:07, 5 users, load average: 0.36, 1.49, 8.63
Tasks: 115 total,   4 running, 111 sleeping,   0 stopped,   0 zombie
Cpu(s): 42.1% us, 45.4% sy, 0.0% ni, 11.9% id,0.7% wa,0.0% hi, 0.0% si
Mem:   507596k total,  176716k used,   330880k free,    5292k buffers
Swap: 1261092k total,  125552k used,  1135540k free,   62844k cached
 
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
27600 apache    15   0 32848  14m 9600 S  7.3  2.9   0:00.50 httpd
27601 apache    15   0 32848  14m 9600 S  7.0  2.9   0:00.47 httpd
27604 apache    15   0 32848  14m 9600 S  7.0  2.9   0:00.45 httpd
27606 apache    15   0 32848  14m 9600 S  6.6  2.9   0:00.37 httpd
27599 apache    15   0 32848  14m 9600 S  6.3  2.9   0:00.19 httpd
27602 apache    15   0 32848  14m 9600 S  6.3  2.9   0:00.19 httpd
27603 apache    15   0 32848  14m 9600 S  6.3  2.9   0:00.19 httpd
27605 apache    15   0 32848  14m 9600 S  6.3  2.9   0:00.19 httpd
27624 apache    15   0 32848  14m 9600 S  6.3  2.9   0:00.19 httpd

起動プロセス/待機プロセスの状態を調べるには

 使用しているプロセス数とその状態を知ることで、設定した値に余剰があるのか不足があるのかを見極めることができます。Apacheのmod_statusによるステータス表示を使用すると、簡単に調べることができます。mod_statusの詳細は、「Apacheパフォーマンス・チューニングの実践」の「mod_statusによるステータス表示」を参照してください。

画面 mod_statusによるステータス表示
画面 mod_statusによるステータス表示

 上の画面のように、「W」や「R」で埋め尽くされ、プロセス数の上限に達している場合は、MaxClientsを見直して値を上げる必要があります。

 「.」が多いようなら、MaxClientsの値が大き過ぎます。ただし、「.」の最大数はMaxClients数ではなくServerLimit数を表しているため、

MaxClients < ServerLimit

のように設定されている場合は、見た目上「.」が使い切られず残ります。そのため、MaxClientsが上限に達しているのか否かが分かりづらくなっています。

 「_」で埋め尽くされるようなら、無駄なプロセスが起動しています。MinSpareServers/MaxSpareServersを下げて、サーバのリソースを抑えるようにします。

 「D」の表示が多い場合はDNS問い合わせでボトルネックが発生しているため、DNS問い合わせの停止を検討します。ApacheでDNS問い合わせを行わないようにするには、第1回の「パフォーマンスを引き出すには」を参照してください。


 Apacheはもともとパフォーマンスが高く、httpd.confでできることも限られます。次回は、プラットフォームやサーバ構成の見直しについて言及します。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る