Apache 2.4没有创建我们定义的最小备用线程

时间:2015-07-18 18:14:34

标签: multithreading performance apache worker apache2.4

我们有一个优化的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个线程。

感谢。

2 个答案:

答案 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获得所提到的工作人员设置。