Есть вопрос, который похож на то, что я хочу знать здесь о сбое сервера: Как я могу узнать, какие именно сценарии PHP занимают все ресурсы сервера? но я не думаю, что какой-либо из ответов отвечает на мой вопрос.
Сегодня мне прислал скриншот от одного из моих клиентов. Он понятия не имел, что это значит, поэтому он отправил его мне, чтобы объяснить ему. Изображение было отправлено его хостинг-провайдером. Сайт моего клиента работает медленно, и я предполагаю, что он спросил хостинговых парней, почему, поэтому они отправили ему это изображение. Изображение выглядит как снимок экрана с верхней командой, и он показывает, что файл занимает 90% + ЦП. Мне это кажется действительно интересным, и я хотел бы знать, как это сделать сам.
Как я уже сказал, снимок экрана выглядит как верхняя команда, но когда я запускаю top и загружаю сервер, я не получаю такого же результата. Я убеждаюсь, что запускаемый мной скрипт занимает некоторое количество ЦП с бесконечным циклом, но все, что я получаю, это apache2 в качестве команды, которая использует ЦП, а на их снимке экрана показано:
/usr/bin/php /path/to/index.php
Вот как выглядит скриншот:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 username 16 -2 134m 26m 7528 R 98 0.2 00:00:50 /usr/bin/php /path/to/file.php
А мой выглядит так:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19632 www-data 20 0 44432 18m 3608 S 27.1 0.9 00:00:82 apache2
Обратите внимание, как у них отображается / usr / bin / php и путь к файлу, который окружает ЦП, но мой просто показывает apache2, который действительно не говорит мне ничего полезного.
Я всегда хотел делать такие вещи и выяснить, какой файл использует процессор, теперь мой вопрос, как они это делают с помощью top? Я знаю, что могу использовать профилировщик, и на самом деле в вопросе, который мне понравился выше, есть два хороших предложения, но мне любопытно, как они это делают с помощью top.
Заранее спасибо.
Разница между вашими двумя системами, по-видимому, заключается в том, что в вашей клиентской системе PHP работает как исполняемый файл CGI (что является распространенным вариантом для хостинг-провайдеров), а в вашей системе он работает как модуль Apache. CGI означает, что отдельная программа запускается всякий раз, когда необходимо выполнить сценарий PHP, что указано в верхнем выводе. С другой стороны, запуск его как модуля Apache означает, что интерпретатор PHP является просто подпрограммой Apache без собственного процесса и не может быть указан в верхней части списка.
Чтобы узнать подобную информацию, как и в случае с top в случае CGI, вы можете попробовать использовать ApacheTop.