一个正在运行的PHP进程在堆积服务器时会被卡住多长时间';s的CPU负载


How long will a running PHP process get stuck while piling up server's CPU load

由于Apache进程(只有Apache,除了MySQL之外没有其他高负载进程),服务器机器上的所有8个CPU核心偶尔都会达到100%的负载,这已经有好几个星期了。

重新启动Apache总是有效的,但通常只需要几个小时,但有一次甚至需要一周。没有可见的图案。总负载达到10左右,但机器的响应仍然很快(通常从1到4或6个顶部浮动,取决于白天)。但这些无休止的峰值与访问或cron作业造成的实际服务器压力之间没有联系。它看起来很随机,所以我最好的猜测是一个错误的PHP脚本一遍又一遍地循环做天知道的事情。

如果没有别的,这样一个无用的负载会使CPU发热,缩短他的寿命,谁知道这个PHP进程花费了多少资源,我无法确定。

所有的PHP进程都由Apache进程封装,所以我实际上看不到UNIX进程列表中当前正在运行哪些PHP脚本。有没有其他方法可以指向特定的脚本?除了在每个PHP脚本中实现某种跟踪代码之外?我不是在运行网络托管,但有不止一个网站,我不知道我怎么能在网络服务器上如此广泛的代码中实现跟踪代码。

因此,我正在寻找纯unix解决方案(Debian)。在最坏的情况下,它将指向PHP脚本,其中包括数十个PHP类和控制程序。在最好的情况下,它将是一些简单的脚本。不管怎样,这都是一个开始。我想。

您可能在进程列表中看不到php进程,但您可以通过以下php函数获取它们的PID:getmypid();

如果您使用的是Debian,请获取上述函数返回的值,然后打开一个终端并使用"top"命令:

顶部-p-xxxx

其中xxxx是"getmypid();"返回的PID