2013-02-22 18 views
14

私はnginx + php-fpmを実行しています。 PHPプロセスのそれぞれが何をしているかを知る方法はありますか?何かmod_statusがapacheで拡張されたようなものです。ここで、PID xを持つapacheプロセスがURL yを処理していることがわかります。私は、PHPプロセスがURLを知っているかどうかはわかりませんが、スクリプトのパスと名前を取得するだけで十分です。PHP-FPMプロセスで実行されているスクリプトを特定する方法

答えて

24

。 PHP 5.3.8または5.3.9以降で利用可能ですが、文書化されていないようです。機能要求#54577に基づいて、ステータスページはオプションfullをサポートし、各ワーカーのステータスを個別に表示します。例えばURLがhttp://server.com/php-status?fullとなり、サンプル出力は、のように見えます:

pid:     22816 
state:    Idle 
start time:   22/Feb/2013:15:03:42 +0100 
start since:   10933 
requests:    28352 
request duration:  1392 
request method:  GET 
request URI:   /ad.php?zID=597 
content length:  0 
user:     - 
script:    /home/web/server.com/ad/ad.php 
last request cpu:  718.39 
last request memory: 1310720 
+3

別の非常に便利なオプションは、?htmlです。例えば:http://server.com/php-status?full&html(出力をHTMLテーブルとしてフォーマットします。これにより、実行中のすべてのスクリプトを一度に見るのがずっと簡単になります) – ivanhoe

+0

how私はそれにアクセスすることができますshoud私はnginxの設定に任意のパラメータを追加しますか? –

+0

@babakfaghihianはい、そのURL(たとえば/ php-status')をphp-fpmに渡す必要があります。 – Marki555

6

PHP-FPMにはステータスモニタが組み込まれていますが、mod_statusの詳細とは異なります。 (CentOSの6上)のphp-FPM configファイルの/etc/php-fpm.d/www.confから

; The URI to view the FPM status page. If this value is not set, no URI will be 
; recognized as a status page. By default, the status page shows the following 
; information: 
; accepted conn - the number of request accepted by the pool; 
; pool    - the name of the pool; 
; process manager - static or dynamic; 
; idle processes - the number of idle processes; 
; active processes - the number of active processes; 
; total processes - the number of idle + active processes. 
; The values of 'idle processes', 'active processes' and 'total processes' are 
; updated each second. The value of 'accepted conn' is updated in real time. 
; Example output: 
; accepted conn: 12073 
; pool:    www 
; process manager: static 
; idle processes: 35 
; active processes: 65 
; total processes: 100 
; By default the status page output is formatted as text/plain. Passing either 
; 'html' or 'json' as a query string will return the corresponding output 
; syntax. Example: 
; http://www.foo.bar/status 
; http://www.foo.bar/status?json 
; http://www.foo.bar/status?html 
; Note: The value must start with a leading slash (/). The value can be 
;  anything, but it may not be a good idea to use the .php extension or it 
;  may conflict with a real PHP file. 
; Default Value: not set 
;pm.status_path = /status 

このオプションを有効にした場合は、その後、PHP-FPMのためnginxのからあなたのソケット/ポートへのパスを渡すことができますし、ステータスページを表示することができます。

nginx.conf:私は解決策を発見したいくつかのグーグルで時間と閲覧PHP.netバグ追跡システムの後

location /status { 

    include fastcgi_params; 
    fastcgi_pass unix:/var/lib/php/php-fpm.sock; 

} 
+0

は、はい私は、PHP-FPMからこの状況を知って、私はすでにそれを使用していますmuninとzabbixの監視で。ただし、プロセスごとの情報ではなく、集約情報のみを提供します。 – Marki555

+0

カスタムロギングソリューションの作成やアクセスログの処理の設定とは別にできることはありませんが、処理時間などの詳細な情報は得られません。私はPHP-FPMが成熟するにつれて状態報告を拡張すると確信しています。 – sjdaws

+0

最後に、ステータスページがプロセスごとの情報をサポートしていることがわかりました(私の答えを見てください)。 – Marki555

3

CGIコマンドラインは、よりにconvinientです:

SCRIPT_NAME=/status \ 
SCRIPT_FILENAME=/status \ 
REQUEST_METHOD=GET \ 
cgi-fcgi -bind -connect 127.0.0.1:9000 
+4

OPが探しているものを返すには、 'QUERY_STRING = full'を追加する必要があることにも注意してください。 'SCRIPT_FILENAME'を'/status?full'に変更することはできません。 – Isius

+0

'pm.status_path'のコメントを外してステータスページを有効にする必要があります。この方法の利点は、Webサーバーによって公開される必要がないことです。 'SCRIPT_NAME'と' SCRIPT_FILENAME'は 'php-fpm.conf'ファイルの' pm.status_path'と同じでなければなりません。その最後のパラメータ( '127.0.0.1:9000')はFCGIサーバへの接続です。ウェブサーバではなく、同じINIファイル内の' listen'パラメータと同じでなければなりません。ソケットの場合、 'sudo'を使用して接続する必要があります。その場合は' -E'を使って 'sudo'に環境変数を' cgi-fcgi'に渡すよう指示します。 – Wolfgang

関連する問題