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

Apache 2.4 not creating min spare threads which we have defined

我们有一个优化的 Apache 2.2 设置,它工作正常,但在升级到 Apache 2.4 后似乎没有反应。两个 Apache 都启用了 worker 模块,下面分享了详细信息。

Apache 2.2 Settings

<IfModule worker.c>
ServerLimit         40
StartServers        40
MaxClients          2000
MinSpareThreads     2000
ThreadsPerChild     50
</IfModule>

Apache 2.2 Server-Status output

35 requests currently being processed, 1965 idle workers

Apache 2.4 Settings

<IfModule worker.c>
ServerLimit           40
StartServers          40
MaxRequestWorkers     2000
MinSpareThreads       2000
ThreadsPerChild       50
</IfModule>

Apache 2.4 Server-Status output

1 requests currently being processed, 99 idle workers

需要有人帮助指出我缺少的设置,以便我可以让我的 Apache 2.4 在 Apache 服务启动时创建 2000 个线程。

谢谢。

首先,如果您需要 IfModule,您应该使用它,因为它是模块的实际名称。其次,如果您知道模块将在那里 ,则不应使用 IfModule 。只使用配置选项,不要用 IfModule 粉饰它。

其次,我建议您从 worker mpm 切换到 event mpm,尤其是当您的服务器负载很高时,因为 event mpm 旨在解决 c10k 问题,而 worker mpm 只是 "throws more threads at it".

说了这么多,如图所示,您的配置似乎不是问题的原因,所以问题出在其他地方。为了更好地了解发生了什么,您应该:

  • 删除指令周围的 IfModule 内容,让指令无条件地应用

  • 检查错误日志的第一个条目(它将告诉您 httpd 是否正在覆盖您的设置本身)或检查您手动启动 httpd 时的输出。如果 httpd 强烈不同意您的设置,它会告诉您原因。

  • Grep,在你的配置文件 space 中,找到你上面的指令,看看是否有任何其他配置文件覆盖它们。

我本来可以将其作为评论发布的,但是嗯...业力不足:(

感谢丹尼尔的回复。

我几个小时前才发现这个问题。 conf '00-mpm.conf'(具有启用 prefork / worker / event 的模块)在 worker.c 模块设置下被调用,这似乎导致了问题。将它移到工作人员设置之上,使 apache 能够获取提到的工作人员设置。