Назад | Перейти на главную страницу

Изоляция высокопроизводительного PHP-процесса

У меня есть сервер с 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* в противном случае я бы тоже здесь проверил.

Надеюсь, это может дать некоторое представление об активности этого пользователя.