Как можно отслеживать использование ресурсов для PHP-сайтов на каждом виртуальном хосте в GNU/Linux?

Как можно отслеживать использование ресурсов для PHP-сайтов на каждом виртуальном хосте в GNU/Linux?

Запуск группы PHP-сайтов через apache2.4/mod_php на RHEL с использованием prefork MPM.

Мои дочерние процессы Apache используют довольно много оперативной памяти и значительную часть ресурсов ЦП.

Мне бы хотелось иметь возможность определять использование ОЗУ/ЦП для каждого виртуального хоста.

Одна из идей, которая у меня была, состояла в том, чтобы использовать PHP-FPM и создать один пул рабочих процессов на виртуальный хост. Однако мне не ясно, могу ли я назвать или пометить рабочие процессы, чтобы иметь возможность агрегировать статистику использования ресурсов осмысленным образом.

Мне кажется, что крупные хостинг-провайдеры уже сталкивались с этой проблемой.

Есть идеи?

решение1

С prefork mod_php вы более или менее не имеете понятия об использовании RAM/CPU различными vhosts. Проблема в том, что все процессы Apache работают под одним и тем же пользователем, и каждый процесс обслуживает все vhosts. Поэтому один процесс может обслуживать vhostA в один момент и vhostB в другой.

Чтобы сделать ситуацию еще хуже, с каждым обслуженным запросом для процессов Apache с mod_php использование оперативной памяти имеет тенденцию расти до тех пор, пока процесс не обслужит MaxRequestPerChild запросов, после чего процесс уходит на пенсию, а его место занимает новый, небольшой и легкий процесс. Таким образом, отслеживать использование ресурсов с помощью prefork/mod_php практически невозможно.

Что вы можете сделать, так это использовать инструмент, который анализирует access_log, например apachetop, и следить за тем, какие запросы обслуживает apache. Это не даст вам очень подробных результатов, но вы, по крайней мере, увидите какие-то закономерности. Это может помочь вам, если один из ваших vhosts забивает весь сервер.

С другой стороны, если вам нужно лучшее решение, есть несколько способов решения этой проблемы. Вы можете заменить prefork на itk. mpm-itk позволяет вам запускать каждый vhost под разными UID/GID, что, в свою очередь, решит вашу проблему с метриками потребления ресурсов, например, вы можете просто отслеживать использование оперативной памяти для каждого UID.

Другое направление — PHP-FPM с отдельным пулом для каждого vhost. Но это только разделит потребление ресурсов PHP, вы все равно не сможете увидеть, что делает apache. Но с удалением mod_php из процессов apache вы можете запускать их с помощью mpm-worker (потоковая модель), и использование оперативной памяти apache, вероятно, будет незначительным по сравнению с PHP. Что касается тегирования процессов — вы можете просто запускать их под разными UID.

Связанный контент