Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个正在运行的PHP进程在堆积服务器的CPU负载时会停滞多久_Php_Apache_Process_Load_Debian - Fatal编程技术网

一个正在运行的PHP进程在堆积服务器的CPU负载时会停滞多久

一个正在运行的PHP进程在堆积服务器的CPU负载时会停滞多久,php,apache,process,load,debian,Php,Apache,Process,Load,Debian,由于Apache进程的原因,服务器机器上的所有8个CPU核心偶尔都达到了几乎100%的负载,这已经过去了好几个星期了。只有Apache,除了MySQL,没有其他高负载进程 重启Apache总是有效的,但通常只有几个小时,但有一次甚至是一周。没有明显的图案。总负载达到10左右,但机器仍然响应非常快,通常从1到4或6个顶部浮动,具体取决于白天。但这些永无休止的峰值与访问或cron作业造成的实际服务器压力之间没有联系。这看起来很随机,所以我最好的猜测是一个有缺陷的PHP脚本一遍又一遍地做着天知道的事情

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

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

如果没有别的,这样一个无用的负载正在加热CPU,缩短他的生命周期,谁知道这个PHP进程花费了多少资源,我无法确定

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


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

您可能在进程列表中看不到php进程,但您可以通过这个php函数获得它们的PID:getmypid

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

top-p xxxx
其中xxxx为getmypid返回的PID

首先,您可以在apache上启用mod server_status,以查看哪些请求正在消耗资源。您还可以使用strace-p连接到100%CPU进程,并查看它正在进行的系统调用。这可能会给你一个提示。@DvirVolk mod_status似乎没有多大帮助,但谢谢你的strace命令。尽管这让我想到了负载再次升高时必须研究的另一件事:通常Apache进程正在生成和消亡,但我没有固定的PID。如果在峰值运行时,任何apache进程都没有固定的PID,这是否意味着没有长时间运行的php脚本,或者脚本在运行时可以从一个apache进程转移到另一个apache进程?为什么mod_status没有帮助?如果启用详细模式,您可以看到每个脚本的实际CPU消耗,这非常有用。无论如何,PHP的PID就是apache的PID,同一个脚本在它的整个生命周期中保持着相同的进程。@DvirVolk,我的错,我不知道ExtendedStatus。不管怎么说,有人要求提供图片之类的东西。不确定它是否指向我正在寻找的php脚本,但我会尝试一下。下一次我还将更仔细地了解apache/php的PIDs。为了确保它们没有改变,也就是说,它们仍然持有相同的php脚本。虽然通常有四个或六个PHP脚本同时运行。@Saix当然,同一个apache进程运行不同的PHP脚本。通常,消耗100%CPU的脚本会运行很长一段时间。顺便问一下,这可能是内存问题吗?你检查过你的交换状态了吗?尝试减少apache workers.top允许的最大数量-p xxxx只需过滤进程列表。它没有显示apachesuperior进程包装了什么PHP进程。getmypid可以显示实际的PHP进程ID,但是如果我知道应该从哪个PHP脚本调用它,我就不需要它了。