为啥有这么多 apache 进程在运行?

Posted

技术标签:

【中文标题】为啥有这么多 apache 进程在运行?【英文标题】:Why there are so many apache processes running?为什么有这么多 apache 进程在运行? 【发布时间】:2014-01-01 08:32:15 【问题描述】:

我正在使用免费的 EC2 Micro 实例托管一个在 Linux 上运行 Apache 的小型测试网站。

当我尝试用“top”查看后台进程时,我看到了很多(30+)个“apache”用户

PID    user     PR   NI VIRT RES   SHR S  %CPU %MEM  TIME+   COMMAND

12104 apache    20   0  429m 9024 2420 S  1.0  0.2   0:02.91  httpd              
12273 apache    20   0  429m 9108 2504 S  1.0  0.2   0:01.20  httpd              
...

我不确定这是否正常。这是否意味着我可能被某人/病毒附身?

附: 我现在只希望 2-3 个测试用户使用它。这是一个 php + apache + mysql 架构师。

谢谢。

【问题讨论】:

您能澄清几件事:网站有多小?您希望网站上有几十个用户还是少数几个?多少是很多? 100 个 apache 进程还是十几个? 另外,您使用的是什么语言和 Apache 绑定? 我现在只希望 2-3 个测试用户使用它。这是一个 php + apache + mysql 架构师。 您的 Apache 配置对此有何看法? 【参考方案1】:

Apache 将预先创建工作进程,因此,当出现负载峰值时,这些进程可以立即接收请求,而不是等待主进程产生足够多的请求。检查您的 httpd.conf 中的 MinSpareServers、MaxSpareServers 和 ServerLimit。

【讨论】:

这是有道理的。但是,我将 MaxSpareSevers 更改为 12(保持 ServerLimit 和 MaxClient 为 128),重新启动 apache,但我仍然看到 30 多个 apache 进程。有什么想法吗?谢谢! 在您的 httpd 配置文件中搜索字符串“server-status”。默认配置文件有一个示例,已注释掉,说明特殊 URL your.server/server-status 如何提供有关服务器和进程正在做什么的各种信息。删除 cmets,更改“接受自”部分以允许从您的客户端访问(默认拒绝任何地方),重新启动服务器,并检查特殊 URL。 server-info 也有类似的东西,但 server-status 有更多信息。

以上是关于为啥有这么多 apache 进程在运行?的主要内容,如果未能解决你的问题,请参考以下文章

为啥Java会产生这么多进程?

Python 多处理 - 为啥每个进程有这么多线程?

为啥导出到可运行的 jar 会使应用占用这么多空间?

为啥我最近从运行 Android 10 的三星设备上收到这么多 InflateException 崩溃?

为啥一个简单的更新游标要花这么多时间?

为啥 scikit-learn 中的 GridSearchCV 会产生这么多线程