CascadiaPHP 2024

Page d'état

Cette page fournit des informations sur la configuration et le contenu de la page d'état du FPM. Voir aussi fpm_get_status().

Configuration

La page d'état de FPM peut être activée en définissant le paramètre pm.status_path dans la configuration du pool FPM.

Attention

Pour des raisons de sécurité, la page d'état du FPM devrait être limitée aux requêtes internes ou aux IP de clients connues, car la page révèle les URLs des requêtes et des informations sur les ressources disponibles.

Selon la configuration du serveur web, il peut être nécessaire de configurer le serveur web pour autoriser les requêtes directement vers ce chemin, en contournant les scripts PHP. Un exemple de configuration pour Apache avec FPM écoutant sur UDS et pm.status_path fixé à /fpm-status:

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

Après le rechargement ou le redémarrage de FPM et du serveur web, la page d'état sera accessible à partir du navigateur (à condition que la requête provienne d'une adresse IP autorisée si la restriction d'IP a été configurée).

Paramètres de la requête

Le format de la page d'état peut être modifié en spécifiant l'un des paramètres de requête suivants :

  • html
  • json
  • openmetrics
  • xml

Des informations supplémentaires peuvent également être retournées en utilisant le paramètre de requête full.

Exemple d'URL de page d'état :

  • https://localhost/fpm-status - Brève sortie dans le format texte par défaut
  • https://localhost/fpm-status?full - Résultats complets dans le format de texte par défaut
  • https://localhost/fpm-status?json - Résultat succinct au format JSON
  • https://localhost/fpm-status?html&full - Résultats complets au format HTML

Informations affichées

Les valeurs de date et d'heure utilisent le format d'horodatage Unix dans les sorties JSON et XML, sinon elles utilisent le format résultant de l'exemple suivant "03/Jun/2021:07:21:46 +0100".

Informations de base - Toujours affichées sur la page d'état
Paramètre Description
pool Le nom du pool de processus FPM.
proccess manager Le type de gestionnaire de processus - statique, dynamique ou à la demande.
start time Date et heure du dernier démarrage du pool de processus.
start since Temps en secondes écoulées depuis le dernier démarrage du pool de processus.
accepted conn Nombre total de connexions acceptées.
listen queue Nombre de requêtes (backlog) en attente d'un processus libre.
max listen queue Le nombre maximum de requêtes vues dans la file d'attente à un moment donné.
listen queue len Taille maximale autorisée de la file d'attente.
idle processes Nombre de processus actuellement inactifs (en attente de requêtes).
active processes Nombre de processus qui traitent actuellement des requêtes.
total processes Nombre total de processus en cours.
max active processes Nombre maximal de processus actifs simultanément.
max children reached Le nombre maximal de processus a-t-il déjà été atteint ? Si oui, la valeur affichée est plus grande ou égale à 1, sinon la valeur affichée est 0.
slow requests Le nombre total de requêtes qui ont atteint le délai configuré de request_slowlog_timeout.
Informations par processus - affichées uniquement en mode de sortie complète (full)
Paramètre Description
pid Le PID système du processus.
state L'état du processus - Idle, Running, ...
start time La date/heure à laquelle le processus a démarré.
start since Le nombre de secondes écoulées depuis le début du processus.
requests Le nombre total de requêtes servies.
request duration Le temps total en microsecondes passées à traiter les requêtes.
request method La méthode HTTP de la dernière requête servie.
request uri L'URI de la dernière requête servie (après traitement par le serveur web, il peut toujours s'agir de /index.php si vous utilisez un motif de redirection du contrôleur frontal).
content length La longueur du corps de la requête, en octets, de la dernière requête.
user L'utilisateur HTTP (PHP_AUTH_USER) de la dernière requête.
script Le chemin complet du script exécuté par la dernière requête. Ce sera '-' si non applicable (par exemple, les requêtes de la page d'état).
last request cpu Le %cpu de la dernière requête. Ce sera 0 si le processus n'est pas au repos car le calcul est effectué lorsque le traitement de la requête est terminé. La valeur peut dépasser 100 %, car l'indicateur indiquera le pourcentage total du temps CPU utilisé lors de la dernière requête - prend en compte les processus sur tous les cœurs, alors que le 100 % est pour un seul cœur.
last request memory La quantité maximale de mémoire consommée par la dernière requête. Cette valeur sera 0 si le processus n'est pas au repos, car le calcul est effectué lorsque le traitement de la requête est terminé.

Note:

Toutes les valeurs sont spécifiques au pool et sont réinitialisées lorsque FPM est redémarré.

Note:

Le format de sortie OpenMetrics utilise différents types de paramètres pour mieux s'adapter au format OpenMetrics. Les paramètres et les descriptions de leurs valeurs sont inclus dans la sortie du format OpenMetrics.

Historique

Version Description
8.1.0 Le format openmetrics a été ajouté.
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
12 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
12 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