如何找出是什么让我的PHP应用程序挂起Apache服务器


How to find out what makes my PHP application to hang the Apache server?

我遇到了一个问题,我的PHP应用程序有时会挂起,Apache服务器需要很长时间才能重新启动。有没有什么方法可以确定是什么原因导致了这个问题?

如果您在linux服务器上,一个繁重的解决方案可能是限制Apache进程。

它将为您提供Apache进程完成的所有系统调用(和参数),并最终找到可能挂起的内容(或者发现您的脚本试图获取无法读取的资源(例如文件),打开套接字并等待超时,等等)。

你这样调用它:

strace-f-p pid

pid是要跟踪的进程的pid。

在您的情况下,我建议您更改Apache服务器的配置(如果需要),以生成少量服务器。您可以使用常规的ps命令获取它们的pid。然后,您可以通过添加-ppid1-ppid2等,同时拖动多个pid。您还可以使用-o filename和-f将每个进程strace写入filename.pid文件。然后运行HTTP请求。处理您请求的进程将位于最大的.pid文件中。

还可以使用-s大小来指定要捕获的文本的长度,例如在"write"系统调用中,否则可能会错过感兴趣的信息。

它可能很难阅读,但可以提供真正有用的信息。我经常在绝望的情况下使用它!