第20日目:Coffee Break 〜Apache(mod_status)について〜
|
どうも、('A`)です。
最近社内では「日記を書いている変なおじさん」と呼ばれています(泣
どうも日記を書いている時に思わず「あー」とか「うー」とか独り言が出ている様で
気がつくと生暖かい視線で見られています。。。
えーと前回の日記でも書きましたが、思う様にテスト環境が動いてくれません。
もしかすると設定とかインストールに問題があったのかと思い、もう一度「雪だるま」
スレッドとか「特化型」スレッドとかを最初から読み返しているところです。
ただ、読む対象のスレッドの数が半端無く多くて大変ですが・・・
運用情報の「特化型」スレッドは現在Part 27まで、難民板の「雪だるま」スレッドに
至ってはPart 75まであります。
(こんな時、「●持ってて良かった〜」と思います。)
しかし、、、未だに解決方法が見つかっていません。
4台のサーバは同一サブネット(同じIP大台:206.223.147.xxx)で用意したけど
違うスイッチにそれぞれ接続しているから、それがまずいのかなあ。
もしくはロードバランサー用サーバのNICが1つだけで、それで外部からの
アクセスの受け取りとmatdからの出力を兼用しているのがまずいのかなあ・・・
引き続き調べよう。
という訳で、予告通りにCoffeeBreackとなりました(涙
さて今日の題材は、と言いますとApacheの「mod_status」についてです。
自分でサーバを構築・運用している人ならばサーバ管理という点からも
導入する事をお勧めします。便利なツール(機能)です。
(「言われなくても入れてるわいっ!」って返されそう・・・('A`))
「mod_status」はApacheの現在の動作・負荷状況を把握するのにApacheで
提供されている機能です。
Apacheをインストールすると組み込み型モジュールとして標準で入ります。
(かなり古いバージョンだったり、./configure時に --disable-status なんて
指定していると入っていないかも、です。)
ちなみにT-Banana版のApacheでは以下のモジュールが組み込み型として
インストールされています。
(自分でサーバを構築している人やroot権限付サーバを運用されている人は
スーパーユーザモードから httpd -l とコマンドを入力すると、サーバに
組み込まれているモジュールの一覧が表示できます。)
今回はT-Bananaのパッケージをインストールしたサーバ(banana260)を例に
説明を続けます。
[Apache組み込みモジュール(T-Banana版)]
core.c
mod_access.c
mod_auth.c
mod_include.c
mod_deflate.c
mod_log_config.c
mod_env.c
mod_setenvif.c
mod_ssl.c
prefork.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_suexec.c
mod_cgi.c
mod_dir.c
mod_userdir.c
mod_alias.c
mod_rewrite.c
mod_so.c
|
mod_statusのモジュール(mod_status.c)が入っている事が確認できたら、
Apacheの設定ファイル(httpd.conf)に以下の記述を入れます。
1)とりあえず情報を出したい場合
ExtendedStatus Off
<Location /server-status>
SetHandler server-status
Order allow,deny
Allow from all
</Location>
2)詳細情報を出したい場合
ExtendedStatus On
<Location /server-status>
SetHandler server-status
Order allow,deny
Allow from all
</Location>
|
上記の様に設定ファイル(httpd.conf)を修正・保存したら、Apacheを再起動して、
ブラウザから http://ホスト名/server-status/ にアクセスしてみて下さい。
1)で指定した場合にはこんな形式のページが、
2)で指定した場合にはこんな形式のページが
表示されます。
表示されている内容は大きく分けて、次の2つから構成されています。
a) Apache全体の基本情報と稼働状況情報
(先頭から 「1 requests currently being processed, 31 idle workers 」のところまで)
b) Apacheの各プロセス単位での稼働状況・情報
(「1 requests currently being processed, 31 idle workers 」の次から最後まで)
2)の方が表示される内容(項目)が多くなります。
まず a) Apache全体の基本情報と稼働状況情報で表示される内容(項目)は以下の通りです。
| Server Version | Apacheのバージョン |
| Server Built | Apacheをコンパイルした日 |
| Current Time | 現在の時刻 |
| Restart Time | Apacheを起動した時刻 |
| Parent Server Generation | 再起動した回数 |
| Server uptime | 連続稼働時間 |
| Total Accesses | トータルアクセス数 |
| Total Traffic | トータル転送量 |
| CPU Usage | CPU使用率 |
| u | 通信プロセスが消費したCPU時間(秒) |
| s | 通信プロセスによりシステムが消費したCPU時間(秒) |
| cu | CGIアクセスにおいて生成した子プロセスが消費したCPU時間(秒) |
| cs | CGIアクセスにおいて生成した子プロセスによりシステムが消費したCPU時間(秒) |
| ReqPerSec | 1秒間当たりのリクエスト数 |
| BusyWorkers | 忙しいプロセス数 |
| IdleWorkers | 暇なプロセス数 |
次に b) Apacheの各プロセス単位での稼働状況・情報で表示される内容(項目)は
以下の通りです。
(無理矢理翻訳したから、ちょっと自信無いです、ハイ。)
| Srv | Apache子プロセスの番号 |
| PID | OS上でのプロセスID |
| Acc | 接続番号/子プロセス番号/スロット番号 |
| M | プロセスの動作モード |
| CPU | CPU使用率 |
| SS | 直近のリクエストからの経過時間(秒) |
| Req | 直近のリクエストの所要時間(1/1000秒) |
| Conn | 該当の接続による転送量(KB) |
| Child | 子プロセスの累計データ転送量(MB) |
| Slot | スロットの累計データ転送量(MB) |
| Client | アクセス元(ホスト名又はIPアドレス) |
| VHost | アクセスされたバーチャルホスト名 |
| Request | 処理されたApacheのリクエスト |
※('A`)がちゃんと区別できていない処は「Child」と「Slot」の事です。
ネットで調べても人によっては子プロセスの事を「スロット」と言ってたりします。
また別の人はApacheの定義の「MaxRequestsPerChild でスロット数を指定する」
なんて言ってたりします。
この日記を書いた後でも、時間を見つけて調べてみます。。。
んで、2)で指定した場合のページを使って説明すると
Apacheの状態で特に注意して見るポイントとしては
1) 1秒あたりの平均リクエスト数、1リクエスト当たりの応答(返答)バイト数
.107 requests/sec - 109 B/second - 1024 B/request
(上記の例では 1秒あたり 0.107 回の平均リクエスト、1リクエストあたり 1024バイト)
2) 稼働中の子プロセス、空き状態の子プロセスの数
1 requests currently being processed, 31 idle workers
(上記の例では稼働中が1個、空き状態が31個)
|
後は「 _ 」とか「 . 」とか「W」とかで表示されているマップ情報も見ると良いでしょう。
(マップの記号1つが子プロセス1つに該当します。また表示される個数はhttpd.confで
「ServerLimit」で指定している数と同じです。)
ここで取り上げた情報とtopコマンドで確認できるサーバのメモリ消費量&Swap消費量を
元に、必要ならApacheのプロセスに関する設定(例えばServerLimitとかMaxClient、
Min/MaxSpareServersなど)を修正する事になります。
「必要なら」と断っているのは、サーバの状態というのは個々で違ってきますので、
必ずしもApacheの設定だけを変えても負荷が変わらない、なんて事があるからです。
(例えばCGIがいっぱい動いてそこでメモリが大量に消費されている、なんて場合には
CGIに対しての対応を考えた方が良いでしょう。)
判断が難しいのは、PHPスクリプトが動いている場合です。
パッと見ではApacheの子プロセスがいっぱい動いている or 子プロセスで使用されて
いるメモリ量が多いという形でtopコマンド上で見えるので、それがPHPのスクリプトで
負荷がかかっているのか、純粋に外部からのアクセスでApache本体が重くなってるのか
簡単には判断できないのです。
いずれにしても、サーバの負荷・稼働状況はツールやコマンドを使いながら、
できるだけ多角的に情報収集して分析・判断する事を心がけるのが大事です。
はー、これから引き続きmatdとの格闘です。明日はroot兄(・∀・)にも助太刀を
お願いしようかなあ・・・
それでは、また。
|
|
|
|
|