如何配置Apache只分叉一个子进程/ worker?

时间:2014-09-03 18:53:16

标签: linux apache

我希望启动apache,因此它会生成一个子进程。 (我正在分析一个模块。我知道-X标志,)

根据文档

  

两个指令对活动子进程的数量设置了硬限制   和子进程中的服务器线程数量,并且只能是   通过完全停止服务器然后再次启动它来更改。    ServerLimit是活动子进程数的硬性限制,必须大于或等于MaxClients   指令除以ThreadsPerChild指令。 ThreadLimit是一个   服务器线程数量的硬限制,必须大于   或等于ThreadsPerChild指令。如果是非默认值   为这些指令指定的,它们应该出现在其他worker之前   指令。

我尝试将设置设置为:

<IfModule prefork.c>
StartServers       1
MinSpareServers    1
MaxSpareServers    1
ServerLimit      1
MaxClients       1
MaxRequestsPerChild  4000
</IfModule>


<IfModule worker.c>
StartServers         1
MaxClients          25
MinSpareThreads     25
MaxSpareThreads     25 
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

当我重新启动时,我仍然有四个进程。

root     17173     1  0 11:44 ?        00:00:00 /usr/sbin/httpd -k start
root     17205 17173  0 11:46 ?        00:00:00 /usr/sbin/httpd -k start
apache   17206 17173  0 11:46 ?        00:00:00 /usr/sbin/httpd -k start
apache   17207 17173  0 11:46 ?        00:00:00 /usr/sbin/httpd -k start

我做错了什么?

奇怪的是,如果我使用-X标志,我仍然会得到三个进程。

/ usr / sbin / httpd -X -f /etc/httpd/conf/httpd.conf

apache   17224  4097  1 11:51 pts/1    00:00:00 /usr/sbin/httpd -X -f /etc/httpd/conf/httpd.conf
root     17226 17224  0 11:51 pts/1    00:00:00 /usr/sbin/httpd -X -f /etc/httpd/conf/httpd.conf
apache   17227 17224  0 11:51 pts/1    00:00:00 /usr/sbin/httpd -X -f /etc/httpd/conf/httpd.conf

1 个答案:

答案 0 :(得分:2)

你应该得到两个进程,第一个由root拥有,绑定80端口,管理子[ren],第二个是回答http请求的进程。

尝试ps auxf你应该得到类似的东西:

ps auxf | grep httpd | grep -v 'grep'
root     16955  0.0  0.2 275440 17996 ?        Ss   13:50   0:00 /usr/sbin/httpd -X -f /etc/httpd/conf/httpd.conf
www-data 16987  0.0  0.1 275472  7620 ?        S    13:50   0:00  \_ /usr/sbin/httpd -X -f /etc/httpd/conf/httpd.conf

现在,在浏览网页时,似乎有时会产生第二个根进程,可能是因为在Apache中加载了一个需要的特定模块。如果你真的想跟踪你必须删除模块,请删除高级事物(如SSl证书,RewriteLock等)。

您还可以在每个流程上尝试lsof -p PID检查差异。

以下是此行为的其他一些示例:

但没有人对此有真正的答案。

检查当前使用的mpm(prefork,worker,event?)