Узнайте, какой 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

Другие вопросы по тегам