Apache1.3.xで,mod_statusを使う
0.改訂履歴
- 2008.03.31 新規作成
1.はじめに
このドキュメントでは,Apache 1.3で,mod_statusを有効にして,サーバのパフォーマンス状態を確認してMaxClients等のパラーメータをチューニングする考察までを記載したものである.
なお,使用しているOSは,RedHat ES3.0で,Apacheは,1.3.37である.
2.httpd.confの設定確認
- mod_statusがロード対象となっていることを確認する.
# Example: # LoadModule foo_module libexec/mod_foo.so LoadModule env_module libexec/mod_env.so LoadModule config_log_module libexec/mod_log_config.so LoadModule mime_module libexec/mod_mime.so LoadModule negotiation_module libexec/mod_negotiation.so LoadModule status_module libexec/mod_status.so LoadModule includes_module libexec/mod_include.so |
- また,AddModuleにてmod_statusが有効になっていることを確認する.」
# Reconstruction of the complete module list from all available modules # (static and shared ones) to achieve correct module execution order. # [WHENEVER YOU CHANGE THE LOADMODULE SECTION ABOVE UPDATE THIS, TOO] ClearModuleList AddModule mod_env.c AddModule mod_log_config.c AddModule mod_mime.c AddModule mod_negotiation.c AddModule mod_status.c AddModule mod_include.c |
- 仮想ディレクトリのserver-statusが記述されているが,コメントアウトになっているので,これをコメントアウトして有効にする.
変更前 |
---|
# # Allow server status reports, with the URL of http://servername/server-status # Change the ".example.com" to match your domain to enable. # #<Location /server-status> # SetHandler server-status # Order deny,allow # Deny from all # Allow from .example.com #</Location> |
変更後 |
# # Allow server status reports, with the URL of http://servername/server-status # Change the ".example.com" to match your domain to enable. # <Location /server-status> SetHandler server-status Order deny,allow Deny from all # Allow from .example.com Allow from 192.168.0.100 </Location> |
- この時,関係者以外アクセスできない様に,Allow句によって,server-statusへアクセスできるIPアドレスを指定しておく.
3.ステータスを取得してみる
- mod_statusを有効にするためには,apacheを再起動する.
[root@uranos common]# /usr/local/apache/bin/apachectl stop /usr/local/apache/bin/apachectl stop: httpd stopped [root@uranos common]# /usr/local/apache/bin/apachectl start /usr/local/apache/bin/apachectl start: httpd started [root@uranos common]# |
- プロセスが動作しているか,確認する.
[root@uranos common]# ps -ef | grep httpd root 12225 12223 0 Mar28 ? 00:00:03 tail -F -n 0 /www/local/var/log/httpd/lisms/err.log root 6981 1 0 11:50 ? 00:00:00 /usr/local/apache/bin/httpd mgets 6982 6981 0 11:50 ? 00:00:00 /usr/local/apache/bin/httpd mgets 6983 6981 0 11:50 ? 00:00:00 /usr/local/apache/bin/httpd mgets 6984 6981 1 11:50 ? 00:00:00 /usr/local/apache/bin/httpd mgets 6985 6981 1 11:50 ? 00:00:00 /usr/local/apache/bin/httpd mgets 6986 6981 1 11:50 ? 00:00:00 /usr/local/apache/bin/httpd mgets 6995 6981 0 11:50 ? 00:00:00 /usr/local/apache/bin/httpd mgets 7009 6981 0 11:50 ? 00:00:00 /usr/local/apache/bin/httpd root 7035 27731 0 11:50 pts/6 00:00:00 grep httpd [root@uranos common]# |
- 成功した模様.
- サーバのステータスを取得してみる.
iMac-G5:~ shinnai$ curl http://test.ujp.jp/server-status <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML><HEAD> <TITLE>Apache Status</TITLE> </HEAD><BODY> <H1>Apache Server Status for test.ujp.jp</H1> Server Version: Apache<br> Server Built: Dec 18 2006 16:07:41<br> <hr> Current Time: Monday, 31-Mar-2008 11:57:51 JST<br> Restart Time: Monday, 31-Mar-2008 11:50:07 JST<br> Parent Server Generation: 0 <br> Server uptime: 7 minutes 44 seconds<br> 1 requests currently being processed, 9 idle servers <PRE>____W_____...................................................... ................................................................ ................................................................ ................................................................ </PRE> Scoreboard Key: <br> "<B><code>_</code></B>" Waiting for Connection, "<B><code>S</code></B>" Starting up, "<B><code>R</code></B>" Reading Request,<BR> "<B><code>W</code></B>" Sending Reply, "<B><code>K</code></B>" Keepalive (read), "<B><code>D</code></B>" DNS Lookup,<BR> "<B><code>L</code></B>" Logging, "<B><code>G</code></B>" Gracefully finishing, "<B><code>.</code></B>" Open slot with no current process<P> <P> PID Key: <br> <PRE> 6982 in state: _ , 6983 in state: _ , 6984 in state: _ 6985 in state: _ , 6986 in state: W , 6995 in state: _ 7009 in state: _ , 7046 in state: _ , 8587 in state: _ 9534 in state: _ , </PRE> <hr>To obtain a full report with current status information you need to use the <code>ExtendedStatus On</code> directive. </BODY></HTML> iMac-G5:~ shinnai$ |
- server-statusの結果は,HTMLで出力されるので,Webブラウザで確認する事ができる.
- また,この数値はリアルタイム値なので,リロードする都度,異なる.
4.ステータスの読み方
- server-statusで出力されるステータスは,以下の通り.
記号 |
項目 | 説明 |
---|---|---|
_
|
Waiting for Connection | プロセスが起動して接続待機中. |
S
|
Starting up | プロセス起動中. |
R
|
Reading Request | プロセスがリクエスト受信中 |
W
|
Sending Reply | プロセスが応答中 |
K
|
Keepalive(read) | Keepalive(接続保持状態)で接続しているが,データの流れが無いもの. |
D
|
DNS Lookup | DNSを検索中. |
L
|
Logging | 接続処理完了後,ログ出力中. |
G
|
Gracefull finishing | ApacheをGracefullで再起動しているため,接続終了待ち. |
.
|
Open slot with no current process | Maxプロセスが起動していない. |
- 例えば,先ほど例では,次の様になっている.
Current Time: Monday, 31-Mar-2008 11:22:48 JST Restart Time: Monday, 31-Mar-2008 11:09:54 JST Parent Server Generation: 0 Server uptime: 12 minutes 54 seconds 2 requests currently being processed, 7 idle servers ______W_W....................................................... ................................................................ ................................................................ ................................................................ PID Key: 15805 in state: _ , 15806 in state: _ , 15807 in state: _ 15808 in state: _ , 15809 in state: _ , 15821 in state: _ 16417 in state: W , 16437 in state: _ , 19075 in state: W |
- この___とか...の数を数えると,httpd.confのMaxClientsで指定された数だけある事がわかる.
- また,Wが2つあるので,2セッションが応答中ということになる.
- ちょっとアクセスが多い時間だと,次の様になる.
102 requests currently being processed, 3 idle servers <PRE>WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW__WW_....................... ................................................................ ................................................................ </PRE> |
- この場合は,次の様に読み取ることができる.
- 最大256クライアント中,105プロセスが起動している.
- リクエストを受け付けているのが,102プロセス.
- 3プロセスはアイドル中.
- この状態は,負荷が高くなりつつあると言える.
- このサーバ場合,KeepAliveを利用していないので,105プロセスを利用している実際のクライアント数が何ユーザに該当するのか不明.
- これば,別にApacheのアクセスログからanalogで分析していて,このシステムでは,1PageViewあたり18Requestとわかっているので,ここでは約6ユーザが接続していると考えられる.
- 状態でCPU使用率とメモリの空き容量を考察し,余裕があればMaxClientsを上げる等の対策が考えられる.