pstreeは、プロセスの親子関係を可視化してくれるコマンドです。
ApacheのMPMの設定を確認するのにとても便利です。
Apacheが使っているMPMの確認
Apacheが使っているMPMがなにか確認するには、-Vオプションを使います。
Ubuntu/Debianでは、Apacheのプロセスは、apache2です。
他のディストリビューションの場合は、httpdコマンドを使います。
Ubuntu 10.04では、workerを使っているようです。
workerは、マルチプロセス、マルチスレッドのハイブリッド型のMPMです。
$ apache2 -V | grep mpm -D APACHE_MPM_DIR="server/mpm/worker" $
workerの設定を確認
/etc/apache2/apache2.confを確認します。
初期設定では、
- 起動時に2プロセス(StartServers)起動
- 1プロセス当り25スレッド起動
で50の待ち受けスレッドが作成されるようです。
<IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0 </IfModule>
pstreeコマンドでプロセスとスレッドの確認
pstreeコマンドで確認すると下記のようなプロセスツリーが確認できます。
root権限で起動されたプロセスからwww-dataで、いくつかapache2プロセスが起動されています。
1つ目は、Ruby on Railsを動かすための、passengerが動いているプロセスです。
2つ目と3つ目は、たぶん管理プロセスでしょうか。
4つ目と5つ目が設定に従って作成された2つのプロセスで、それぞれ80ポートをListenするスレッドとThreadsPerChildに指定された25スレッドの計26スレッドを持ったプロセスです。
同じ内容は、Apacheのserver-statusモジュールでも確認できます。
$ pstree -a init ├─apache2 -k start │ ├─ApplicationPool 0/usr/lib/phusion_passenger/passeng │ │ ├─ruby │ │ │ └─{ruby} │ │ └─2*[{ApplicationPoo}] │ ├─apache2 -k start │ ├─apache2 -k start │ ├─apache2 -k start │ │ └─26*[{apache2}] │ └─apache2 -k start │ └─26*[{apache2}]