我们有一个优化的Apache 2.2设置可以正常工作,但升级到Apache 2.4后似乎没有反映出来。两个Apache都使用了worker模块,并在下面分享了详细信息。
Apache 2.2设置
<IfModule worker.c> ServerLimit 40 StartServers 40 MaxClients 2000 MinSpareThreads 2000 ThreadsPerChild 50 </IfModule>
Apache 2.2服务器状态输出
35 requests currently being processed, 1965 idle workers
Apache 2.4设置
<IfModule worker.c> ServerLimit 40 StartServers 40 MaxRequestWorkers 2000 MinSpareThreads 2000 ThreadsPerChild 50 </IfModule>
Apache 2.4服务器状态输出
1 requests currently being processed, 99 idle workers
需要别人的帮助才能指出我缺少的设置,以便我可以让我的Apache 2.4在Apache服务启动时创建2000个线程。
感谢。
答案 0 :(得分:1)
首先,如果你需要IfModule,你应该使用,因为那是模块的实际名称。其次,如果您知道该模块将在那里,则不应该使用IfModule 。只需使用配置选项,不要使用IfModule进行糖衣涂装。
其次,我建议你从worker mpm切换到事件mpm,特别是如果你的服务器负载很高,因为事件mpm是为了解决c10k问题,而worker mpm只是“抛出更多线程在它“。
说了这么多,看起来你的配置似乎不是原因,所以问题出在其他地方。为了更好地了解正在发生的事情,您应该:
删除指令周围的IfModule,让指令无条件地应用
检查错误日志的第一个条目(它将告诉您httpd是否覆盖您的设置本身)或检查手动启动httpd时的输出。如果httpd非常不同意您的设置,它会告诉您原因。
Grep,在您的配置文件空间内,用于您上面的指令,并查看是否有任何其他配置文件覆盖它们。
我会发布这个只是一个评论,但是......呃...不够业力:(
答案 1 :(得分:1)
感谢Daniel的回复。
我刚回来几个小时就发现了这个问题。 conf '00 -mpm.conf'(其中包含启用prefork / worker / event的模块)在worker.c模块设置下面调用,这似乎导致了问题。将它移到工作者设置之上会使apache获得所提到的工作人员设置。