Узнайте, какой PHP-скрипт выполняется в каждом процессе HTTPD
Я хотел бы узнать способ проверки процессов HTTPD, чтобы определить, какой PHP-скрипт на них запущен.
Я уже выполнил "netstat" и обнаружил, что некоторые процессы слишком долго удерживали DB и сетевые сокеты, и теперь я хочу знать, какие сценарии вызывают его.
Кстати, я использую Linux.
2 ответа
Вам нужен модуль Apache mod_status
включено (основной конфигурационный файл Apache CentOs находится по адресу /etc/httpd/conf/httpd.conf)
LoadModule status_module modules/mod_status.so
с опцией ExtendedStatus on
(это должно быть установлено в том же конфигурационном файле, что и выше)
# ExtendedStatus controls whether Apache will generate "full" status
# information (ExtendedStatus On) or just basic information (ExtendedStatus
# Off) when the "server-status" handler is called. The default is Off.
#
ExtendedStatus On
и некоторые права доступа для этого установлены (заменить ниже XXX.XXX.XXX.XXX
с вашим IP - это можно найти в том же файле конфигурации, что и выше)
# Allow server status reports generated by mod_status,
# with the URL of http://servername/server-status
# Change the ".example.com" to match your domain to enable.
#
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost 127.0.0.1 XXX.XXX.XXX.XXX
</Location>
Наконец, вы увидите, что делает каждый процесс HTTPD, перейдя по http://your-server-name/server-status
Это покажет pids и URL-адреса, которые в настоящее время обрабатываются способом, представленным здесь.
Предлагаемый mod_status является отличной альтернативой, чтобы увидеть, что процесс делает, что в данный момент, вы включаете его (и обычно добавляете операторы Allow, чтобы позволить вам просматривать его из диапазона IP-адресов, с которого вы получаете доступ к веб-серверу), а затем переходите к http://site.name/server-status
и получить хороший вывод. Пример можно увидеть на собственном сайте Apache: http://www.apache.org/server-status
Еще один полезный инструмент, чтобы увидеть, что происходит с процессом lsof
, если у вас есть известный PID, который "зависает", вы можете набрать lsof -p <pid>
чтобы увидеть, что происходит с этим. Чтобы соответствовать всем процессам, вы можете напечатать что-то вроде lsof -c apache
или же lsof -c httpd
, Это очень универсальный инструмент с множеством вариантов того, что вы хотите увидеть.
Наконец у вас есть strace
которые могут подключаться к запущенным процессам, чтобы видеть, что они делают в данный момент с помощью системных вызовов и т. д. strace -p <pid>
например. Предупреждение, это МОЖЕТ иногда приводить к зависанию рабочего процесса, поэтому следите за обновлениями и при необходимости перезапускайте.
Страница руководства lsof(8): http://linux.die.net/man/8/lsof
Страница man (1): http://linux.die.net/man/1/strace