ksaitoの日記

日々試したことの覚え書き

pstreeコマンド

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}]