首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的服务器上打开了大量PHP进程?

为什么我的服务器上打开了大量PHP进程?
EN

Server Fault用户
提问于 2011-11-27 17:17:28
回答 1查看 1.4K关注 0票数 -1

今天我看到我的一个网站不工作了,所以我去服务器上执行ps -eF。我看到大约200个PHP进程运行了4个小时。

Apache是用mpm事件和mod fcgid构建的。

我杀死了所有的PHP进程,现在它运行良好,为什么会发生这种情况呢?这是预期的行为吗?

我真的不明白Apache如何跟踪PHP进程及其进程if的数量,所以如果有人也能在我读到这方面的文章时提供一些参考,那就太好了。

此外,我还使用了"ab“命令(Apache Benchmark)来查看这种情况是否一直在发生,所以我在30个并发请求中连续运行了4到5次,还有大约150个PHP进程在运行,当我继续运行"ab”时,它不会产生更多的进程,而且该网站仍在工作。要明确的是,我执行"ab“的4-5次并不是同一时间,当一个"ab”过程完成时,我就执行了另一个过程,但是每次我执行"ab“时,我执行了30个并发请求。

请把这件事弄清楚!谢谢您:)

EN

回答 1

Server Fault用户

回答已采纳

发布于 2011-11-27 19:48:16

是的,这是预期的行为。看起来你同时运行了5份ab。这导致您的150个PHP进程处理5个ab进程中的每个进程的30个请求。

当所有线程都能在内存中运行时,Apache工作得最好。会有一个负载,在这个负载下,需要将线程交换到磁盘。当这种情况发生时,响应时间会迅速下降。正如你所做的那样,杀死过程将提高性能。在这种情况下,服务器性能可能会变得很差。如果最大线程配置得太高,则使用此行为执行DOS (拒绝服务)相对容易。

导致问题的另一个原因是如果两个进程在两个资源上出现死锁。如果其他进程需要这两种资源中的任何一种,它们可能无法响应。Apache将限制在本例中创建的进程数量。杀死任何一个陷入僵局的进程都应该能解决这个问题。根据正常的锁定顺序,它可能需要一个特定的进程被杀死,以防止另一个死锁。这对服务器性能几乎没有或根本没有影响。

编程错误也可能导致线程挂起。就像你看到的那样,这可能会导致theads粘住。事后很难找到发生了什么,但是apache服务器日志的内容可能会有所帮助。检查错误日志中是否有问题。访问日志可能包含在您终止进程时挂起的请求的条目。

如果一些进程在一段时间内没有被使用,Apache应该会关闭它们。这是由MaxSpareThreads参数控制的。检查您的控制文件,该文件应该对线程、服务器和客户端的参数有一些注释。默认值通常是好的。

如果代码有问题,将MaxRequestsPerChild设置在5000到100之间的某个地方通常会有所帮助。数量越少,创建新线程的频率就越高,apache服务器需要工作的难度就越大。

编辑: Apache将在启动时打开许多线程。这取决于几个参数之间的相互作用。有关参数的详细信息,请参阅MPM配置文档。这与服务器的任何加载无关,通常是正在运行的服务器将持续运行的最小线程数。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/335220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档