web-dev-qa-db-fra.com

Comment déterminer quel script est exécuté dans le processus PHP-FPM

J'utilise nginx + php-fpm. Existe-t-il un moyen de savoir ce que font chacun des processus PHP? Quelque chose comme un mod_status étendu dans Apache, où je peux voir que le processus Apache avec PID x traite l'URL y. I ' Je ne sais pas si le processus PHP connaît l'URL, mais obtenir le chemin et le nom du script sera suffisant.

22
Marki555

Après quelques heures sur Google et en parcourant le système de suivi des bogues PHP.net, j'ai trouvé la solution. Il est disponible depuis PHP 5.3.8 ou 5.3.9, mais ne semble pas être documenté. Selon la demande de fonctionnalité # 54577 , la page d'état prend en charge l'option full, qui affichera séparément le statut de chaque travailleur. Par exemple, l'URL sera http://server.com/php-status?full et l'exemple de sortie ressemble à:

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
27
Marki555

PHP-FPM a un moniteur d'état intégré, bien qu'il ne soit pas aussi détaillé que mod_status. Depuis le fichier de configuration php-fpm /etc/php-fpm.d/www.conf (sur CentOS 6)

; 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

Si vous l'activez, vous pouvez ensuite passer le chemin de nginx à votre socket/port pour PHP-FPM et vous pouvez afficher la page d'état.

nginx.conf:

location /status {

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

}
11
sjdaws

la ligne de commande cgi est plus pratique:

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