У меня есть сервер с 16 ядрами ЦП, который испытывает постоянную среднюю нагрузку 40-70. После кемпинга на top
в течение нескольких часов я изолировал скачки ЦП от одного пользователя.
После нажатия c
на top
команда, высокопроизводительная команда /usr/bin/php /home/user/public_html/index.php
, который в основном бесполезен для изоляции, поскольку это основной обработчик контроллера для всей нашей инфраструктуры PHP MVC (CodeIgniter, если вам интересно).
Причина, по которой я еще не поиграл с профилировщиком кода, заключается в том, что может показаться, что любой процесс PHP под этим пользователем имеет постоянно высокую загрузку ЦП. Я дважды проверил наш slow-query.log (MySQL) на предмет надежности, и это веб-приложение генерирует около 0 медленных запросов.
Вопросы:
Может ли перегруженная или неэффективная база данных MySQL привести к тому, что процессы PHP будут потреблять более высокую, чем обычно, загрузку ЦП? Или эти двое полностью независимы?
PHP и MySQL - это разные процессы, поэтому, когда выполняется медленный запрос MySQL, и вы следуете за ним с помощью top, вы определенно видите, что MySQL начинает загружать процессор.
Почему входящие PHP-запросы должны быть постоянно высокими только для одного пользователя?
Чтобы попытаться изолировать активность этого конкретного пользователя, я бы попытался просмотреть маршруты (и, следовательно, действия контроллера, запускаемые в codeigniter), к которым этот пользователь обращается.
Вы не указали ОС, но предполагаете, что ваше приложение работает на apache + mod_php, поэтому вы должны увидеть, что запросы / маршруты GET и POST доступны в /var/log/apache2/access.log.*
или /var/log/httpd/access*_log*
. Я полагаю, вы уже проверили /var/log/apache2/error.log.*
или /var/log/httpd/error*_log*
в противном случае я бы тоже здесь проверил.
Надеюсь, это может дать некоторое представление об активности этого пользователя.