GNU/Linux에서 가상 호스트별로 PHP 사이트의 리소스 사용량을 모니터링하려면 어떻게 해야 합니까?

GNU/Linux에서 가상 호스트별로 PHP 사이트의 리소스 사용량을 모니터링하려면 어떻게 해야 합니까?

prefork MPM을 사용하여 RHEL에서 apache2.4/mod_php를 통해 여러 PHP 사이트를 실행합니다.

내 아파치 아이들은 상당한 양의 RAM과 많은 CPU를 사용하고 있습니다.

가상 호스트별로 RAM/CPU 사용을 분석하고 싶습니다.

제가 가진 아이디어 중 하나는 PHP-FPM을 사용하고 가상 호스트당 하나의 작업자 풀을 만드는 것이었습니다. 그러나 의미 있는 방식으로 리소스 사용 통계를 집계할 수 있도록 작업자 프로세스에 이름을 지정하거나 태그를 지정할 수 있는지는 확실하지 않습니다.

대규모 공유 호스트가 이전에도 이 문제에 직면했던 것 같습니다.

어떤 아이디어가 있나요?

답변1

prefork mod_php를 사용하면 다른 가상 호스트의 RAM/CPU 사용량에 대해 거의 알지 못합니다. 문제는 모든 Apache 프로세스가 동일한 사용자로 실행되고 모든 프로세스가 모든 가상 호스트를 제공한다는 것입니다. 따라서 한 프로세스는 한 순간에는 vhostA를 제공하고 다른 순간에는 vhostB를 제공할 수 있습니다.

설상가상으로, 각 요청이 처리될 때마다 mod_php를 사용하는 Apache 프로세스의 RAM 사용량은 프로세스가 MaxRequestPerChild 요청을 처리할 때까지 증가하는 경향이 있으며, 그 후에는 프로세스가 종료되고 새롭고 작고 간결한 프로세스가 대신됩니다. 따라서 prefork/mod_php를 사용하여 리소스 사용량을 추적하는 것은 사실상 불가능합니다.

당신이 할 수 있는 일은 apachetop과 같이 access_log를 구문 분석하는 도구를 활용하고 Apache가 제공하는 요청 종류를 관찰하는 것입니다. 그렇게 하면 매우 세분화된 결과를 얻을 수는 없지만 최소한 어떤 종류의 패턴은 볼 수 있습니다. 귀하의 가상 호스트 중 하나가 전체 서버를 스래싱하는 경우 도움이 될 수 있습니다.

반면에 더 나은 솔루션을 원한다면 이 문제를 해결할 수 있는 몇 가지 방법이 있습니다. 프리포크를 itk로 바꿀 수 있습니다. mpm-itk를 사용하면 서로 다른 UID/GID에서 각 가상 호스트를 실행할 수 있으며, 이는 결국 리소스 소비 메트릭 문제를 해결합니다. 예를 들어 UID별 RAM 사용량을 간단히 모니터링할 수 있습니다.

다른 방향은 각 가상 호스트에 대해 별도의 풀을 갖춘 PHP-FPM입니다. 그러나 이는 PHP 리소스 소비만 분리할 뿐이며 여전히 Apache가 수행하는 작업을 볼 수 없습니다. 그러나 Apache 프로세스에서 mod_php를 제거하면 mpm-worker(스레드 모델)로 실행할 수 있으며 Apache의 RAM 사용량은 PHP에 비해 무시할 수 있을 것입니다. 프로세스 태깅과 관련하여 다른 UID에서 간단히 실행할 수 있습니다.

관련 정보