ti-enxame.com

Como determinar qual script está sendo executado no processo PHP-FPM

Estou executando o nginx + php-fpm. Existe alguma maneira de saber o que cada um dos processos PHP está fazendo?) Algo como mod_status estendido no Apache, onde posso ver que o processo Apache com PID x está processando a URL y. ' não tenho certeza se o processo PHP conhece a URL, mas obter o caminho e o nome do script será suficiente.

22
Marki555

Após algumas horas pesquisando e navegando no sistema de rastreamento de bugs do PHP.net, encontrei a solução. Está disponível desde PHP 5.3.8 ou 5.3.9, mas não parece estar documentado. Com base na solicitação de recurso # 54577 , a página de status suporta a opção full, que exibirá o status de cada trabalhador separadamente. Por exemplo, o URL será http://server.com/php-status?full e a saída de amostra é semelhante a:

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

O PHP-FPM possui um monitor de status embutido, embora não seja tão detalhado quanto o mod_status. No arquivo de configuração php-fpm /etc/php-fpm.d/www.conf (no 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

Se você habilitar isso, poderá passar o caminho do nginx para o seu soquete/porta para PHP-FPM e poderá visualizar a página de status.

nginx.conf:

location /status {

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

}
11
sjdaws

a linha de comando cgi é mais conveniente:

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