【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷

実用 Apache 2.0運用・管理術

第3回 httpd.confによるWebサーバの最適化 

鶴長 鎮一(book@tsurunaga.jp)
2005/9/16

スレッドの設定(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によるステータス表示

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

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

MaxClients < ServerLimit

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

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

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

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

3/3

Index
実用 Apache 2.0運用・管理術
 第3回 httpd.confによるWebサーバの最適化
  Page 1
 不要な機能、設定の削除
  不要なモジュールの削除
  Fedora Core/SUSE/Turboのhttpd.conf
  httpd.confの減量
  Page 2
 KeepAliveの設定
  KeepAlive
  MaxKeepAliveRequests
  KeepAliveTimeout
 プロセスの設定(prefork MPM)
  StartServers
  MinSpareServers/MaxSpareServers
  MaxClients/ServerLimit
  MaxRequestsPerChild
  Page 3
 スレッドの設定(worker MPM)
  MinSpareThreads/MaxSpareThreads
  ThreadsPerChild
 プロセスの状態確認方法
  プロセスの使用メモリ量を調べるには
  起動プロセス/待機プロセスの状態を調べるには

連載 実用 Apache 2.0運用・管理術


 Linux Squareフォーラム サーバ構築・運用関連記事
連載:Heartbeatでかんたんクラスタリング(連載中)
オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します
特集:Apache 2.2でWebサイトをパフォーマンスアップ!
最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する
連載:実用 Apache 2.0運用・管理術(全8回)
本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える
連載:実用 BIND 9で作るDNSサーバ(全15回)
本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく
連載:実用qmailサーバ運用・管理術(全14回)
本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで
特集:Samba 3.0の全貌 改訂版
Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

ホワイトペーパーTechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)



- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています