我希望启动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
答案 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?)