使用prefork MPM在RHEL上通过apache2.4 / mod_php运行一堆PHP站点。
我的阿帕奇孩子正在使用公平的内存和大量的CPU。
我希望能够在每个虚拟主机的基础上对RAM / CPU的使用进行分类。
我的一个想法是使用PHP-FPM并为每个虚拟主机创build一个工作池。 但是,我不清楚我是否可以命名或标记工作进程,以便可以有意义地汇总资源使用统计信息。
我觉得大共享主机以前一定会遇到这个问题。
有任何想法吗?
使用prefork mod_php,你或多或less对不同虚拟主机的RAM / CPU使用情况毫无头绪。 问题是所有的apache进程都在同一个用户下运行,每个进程都服务于所有的vhosts。 所以一个进程可以在一个时刻为vhostA服务,在另一个时刻可以为vhostB服务。
更糟糕的是,在每个请求服务的情况下,对于使用mod_php内存使用的Apache进程,往往会增长,直到进程服务MaxRequestPerChild请求,之后进程退休,新的小型精益进程取而代之。 所以使用prefork / mod_php跟踪资源的使用几乎是不可能的。
你可以做的是利用一个parsingaccess_log的工具,像apachetop,并观察apache服务的请求types。 这不会给你非常成功的结果,但你至less会看到某种模式。 这可能会帮助你,如果你的一个虚拟主机是颠簸整个服务器。
另一方面,如果你想要更好的解决scheme,有几种方法可以解决这个问题。 你可以把prefork换成itk。 mpm-itk允许您在不同的UID / GID下运行每个虚拟主机 – 这将依次解决您的资源消耗指标问题 – 例如,您可以简单地监视每个UID的RAM使用情况。
其他方向是PHP-FPM,每个虚拟主机都有独立的池。 但是这只会分离PHP资源消耗,你仍然不能看到apache的function。 但是,从apache进程中删除mod_php,你可以使用mpm-worker(线程模型)运行它们,与PHP相比,apache的RAM使用率可能可以忽略不计。 关于进程标记 – 你可以简单地在不同的UID下运行它们。