velocidad significado php7 configurar fastcgi php

fastcgi - significado - php-fpm nginx



Cómo determinar qué script se está ejecutando en el proceso PHP-FPM (4)

Estoy ejecutando nginx + php-fpm. ¿Hay alguna manera, cómo puedo saber qué está haciendo cada uno de los procesos de PHP? Algo así como mod_status extendido en apache, donde puedo ver que el proceso de apache con PID x está procesando la URL y. No estoy seguro de si el proceso de PHP conoce la URL, pero será suficiente obtener la ruta y el nombre del script.


PHP-FPM tiene un monitor de estado incorporado, aunque no es tan detallado como mod_status. Desde el archivo de configuración php-fpm /etc/php-fpm.d/www.conf (en 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 habilita esto, puede pasar la ruta de acceso de nginx a su socket / puerto para PHP-FPM y puede ver la página de estado.

nginx.conf:

location /status { include fastcgi_params; fastcgi_pass unix:/var/lib/php/php-fpm.sock; }


Puede usar strace para mostrar los scripts que se ejecutan, y muchas otras cosas, en tiempo real. Es bastante detallado, pero puede darle una buena imagen general de lo que está pasando:

# switch php-fpm7.0 for process you''re using sudo strace -f $(pidof php-fpm7.0 | sed ''s//([0-9]*/)//-p /1/g'')

Lo anterior se adjuntará a los procesos bifurcados de php fpm. Utilice -p para adjuntar a un pid particular.

Lo anterior obtendría la ruta del script. Para obtener las direcciones URL, debería mirar sus registros de acceso nginx / apache.

Como nota al margen, para ver los syscalls y cuáles están tomando más tiempo:

sudo strace -c -f $(pidof php-fpm7.0 | sed ''s//([0-9]*/)//-p /1/g'')

Espera un momento, luego presiona Ctr-C


cgi línea de comandos es más conveniente:

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


Después de algunas horas de googlear y de navegar por el sistema de seguimiento de errores PHP.net, he encontrado la solución. Está disponible desde PHP 5.3.8 o 5.3.9, pero no parece estar documentado. En función de la solicitud de función #54577 , la página de estado admite la opción full , que mostrará el estado de cada trabajador por separado. Entonces, por ejemplo, la URL será http://server.com/php-status?full y la salida de muestra se verá así:

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