CascadiaPHP 2024

Página de status

Esta página fornece informações sobre a configuração e o conteúdo da página de status do FPM. Veja também fpm_get_status().

Configuração

A página de status do FPM pode ser habilitada definindo o parâmetro de configuração pm.status_path na configuração do pool FPM.

Cuidado

Por segurança, a página de status do FPM deve ser restrita apenas a solicitações internas ou IPs de clientes conhecidos, pois a página revela URLs de solicitação e informações sobre os recursos disponíveis.

Dependendo da configuração do servidor web, pode ser necessário configurá-lo para permitir solicitações diretamente para este caminho, ignorando quaisquer scripts PHP. Um exemplo de configuração para Apache com FPM escutando em UDS e pm.status_path definido como /fpm-status seria assim:

<LocationMatch "/fpm-status">
 Order Allow,Deny
 Allow from 127.0.0.1
 ProxyPass "unix:/var/run/php-fpm.sock|fcgi://localhost/fpm-status"
</LocationMatch>

Após recarregar ou reiniciar o FPM e o servidor web, a página de status estará acessível a partir do navegador (desde que a solicitação venha de um endereço IP permitido se a restrição de IP tiver sido configurada).

Parâmetros de consulta

O formato da saída da página de status pode ser alterado especificando um dos seguintes parâmetros de consulta:

  • html
  • json
  • openmetrics
  • xml

Informações adicionais também podem ser retornadas usando o parâmetro de consulta full.

Exemplos de URLs de páginas de status:

  • https://localhost/fpm-status - Breve saída no formato de texto padrão
  • https://localhost/fpm-status?full - Saída completa no formato de texto padrão
  • https://localhost/fpm-status?json - Breve saída em formato JSON
  • https://localhost/fpm-status?html&full - Saída completa em formato HTML

Informações exibidas

Os valores de data/hora usam o formato de timestamp Unix na saída JSON e XML; caso contrário, eles usam o formato que resulta no seguinte exemplo de data: "03/Jun/2021:07:21:46 +0100".

Informações básicas - Sempre exibidas na página de status
Parâmetro Descrição
pool O nome do pool de processos FPM.
proccess manager O tipo de gerenciador de processos - estático, dinâmico ou sob demanda.
start time A data/hora em que o pool de processos foi iniciado pela última vez.
start since O tempo em segundos desde que o pool de processos foi iniciado pela última vez.
accepted conn O número total de conexões aceitas.
listen queue O número de solicitações (backlog) aguardando atualmente por um processo livre.
max listen queue O número máximo de solicitações vistas na fila de escuta a qualquer momento.
listen queue len O tamanho máximo permitido da fila de escuta.
idle processes O número de processos que estão atualmente ociosos (aguardando solicitações).
active processes O número de processos que estão processando solicitações no momento.
total processes O número total atual de processos.
max active processes O número máximo de processos ativos simultaneamente.
max children reached O número máximo de processos já foi atingido? Nesse caso, o valor exibido é maior ou igual a 1 caso contrário, o valor é 0.
slow requests O número total de solicitações que atingiram o request_slowlog_timeout configurado.
Informações por processo - exibidas apenas no modo de saída full
Parâmetro Descrição
pid O PID de sistema do processo.
state O estado do processo - Inativo, Em execução, ...
start time A data/hora em que o processo foi iniciado.
start since O número de segundos desde que o processo foi iniciado.
requests O número total de solicitações atendidas.
request duration O tempo total em microssegundos gasto atendendo à última solicitação.
request method O método HTTP da última solicitação atendida.
request uri O URI da última solicitação atendida (após o processamento do servidor web, pode sempre ser /index.php se for usado um modelo de redirecionamento central).
content length O comprimento do corpo da solicitação, em bytes, da última solicitação.
user O usuário HTTP (PHP_AUTH_USER) da última solicitação.
script O caminho completo do script executado pela última solicitação. Será '-' se não for aplicável (por exemplo, solicitações de página de status).
last request cpu A %cpu da última solicitação. Será 0 se o processo não estiver ocioso porque o cálculo é feito quando o processamento da solicitação é concluído. O valor pode exceder 100%, porque a métrica dirá qual porcentagem do tempo total da CPU foi usada na última solicitação - leva em consideração os processos em todos os núcleos, enquanto 100% é para apenas um núcleo.
last request memory A quantidade máxima de memória consumida pela última solicitação. Será 0 se o processo não estiver ocioso porque o cálculo é feito quando o processamento da solicitação é concluído.

Nota:

Todos os valores são específicos do pool e são redefinidos quando o FPM é reiniciado.

Nota:

A saída do formato OpenMetrics usa diferentes tipos de parâmetros para melhor se adequar ao formato OpenMetrics. Os parâmetros e as descrições de seus valores estão incluídos na saída do formato OpenMetrics.

Registro de Alterações

Versão Descrição
8.1.0 O formato openmetrics foi adicionado.
add a note

User Contributed Notes 6 notes

up
15
uwe at ohse dot de
1 year ago
Before someone else misunderstands that:
"request duration The total time in seconds spent serving requests."

This is not the total time of all requests done by that process, but either the time used by the last request done (idle state), or the current request (all other states).

And the number given is not in seconds, but in microseconds.

The fpm status documentation is a mess.
up
1
Anonymous
10 months ago
there is an error in the docs, if you want to use with fastcgi, the correct link in ProxyPass is not

ProxyPass "unix:/var/run/php-fpm.sock|fcgi://localhost/fpm-status"

but only

ProxyPass "unix:/var/run/php-fpm.sock|fcgi://localhost"

otherwise the page says "File not found"
up
1
Mark Gooderum
5 months ago
Anonymous is correct.

So the URI has to match the pm.status_path in the pool configuration and in turn the Apache Location configuration. The same applies to ping.path.

Ergo If you want multiple PHP FPMs exposed on the same Apache each needs their own unique path. Also from experience Apache 8 FPM status_listen doesn't seem to work with the domain socket, only TCP. Obviously for 8.x you'll need unique port numbers for each PHP FPM and they need to match between the pm.status_listen and the Apache ProxyPass line.

So imagine I want FPM status and ping exposed for 7.4 and 8.2.

I then have an Apache config like:

<LocationMatch "/fpm-ping-74">
Order Deny,Allow
Require local
ProxyPass "unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
</LocationMatch>
<LocationMatch "/fpm-status-74">
Order Deny,Allow
Require local
IncludeOptional trusted-ips.conf
ProxyPass "unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
</LocationMatch>

<LocationMatch "/fpm-ping-82">
Order Deny,Allow
Require local
IncludeOptional trusted-ips.conf
ProxyPass "unix:/run/php/php8.2-fpm.sock|fcgi://localhost:9002"
</LocationMatch>
<LocationMatch "/fpm-status-82">
Order Deny,Allow
Require local
ProxyPass "unix:/run/php/php8.2-fpm.sock|fcgi://localhost:9002"
</LocationMatch>

Then in the respective pool config files:

7.4/fpm/pool.d/www.conf:

; status_listen default works in 7.4
pm.status_path = /fpm-status-74
ping.path = /fpm-ping-74

8.2/fpm/pool.d/www.conf:

; Need an explicit TCP listen in 8.x - why?
pm.status_listen = 127.0.0.1:9002
pm.status_path = /fpm-status-82
ping.path = /fpm-ping-82
up
0
Anon at example dot com
14 days ago
Instead of changing the ProxyPass line like suggested by Anonymous you can just use a different socket for pm.status_listen.

So, keep the line and change it to:

ProxyPass "unix:/var/run/php-fpm-status.sock|fcgi://localhost/fpm-status"

And add something like the following to your php-fpm config:

pm.status_listen = /var/run/php-fpm-status.sock
pm.status_path = /fpm-status
up
0
Anon at NOSPAM dot example dot com
14 days ago
Instead of changing the ProxyPass line like suggested by Anonymous you can just use a different socket for pm.status_listen.

So, keep this line:

ProxyPass "unix:/var/run/php-fpm.sock|fcgi://localhost/fpm-status"

And add something like the following to your php-fpm config:

pm.status_listen = /var/run/php-fpm-status.sock
pm.status_path = /fpm-status
up
0
ninsuo
3 months ago
For caddy 2, you may use the following configuration:

http://localhost {
root * /var/www/public

reverse_proxy /status php_fpm:9000 {
transport fastcgi {
env SCRIPT_NAME /status
}
}

encode gzip zstd

php_fastcgi php_fpm:9000
file_server
}

Replace php_fpm:9000 by the host/port of your php fpm or the path of your unix// socket.
To Top