当我将 ThreadPerChild 设置为 200 时出现错误并且无法启动 Apache,尽管我仍有 60% 的可用 RAM。服务器是具有 4GB RAM 的 Windows Server 2008 R2。在这种情况下如何为 apache 使用更多 RAM?
我的 Apache MPM 配置:
# WinNT MPM
# ThreadsPerChild: constant number of worker threads in the server process
# MaxRequestsPerChild: maximum number of requests a server process serves
# Win32DisableAcceptEx: Use accept() rather than AcceptEx() to accept network connections
<IfModule mpm_winnt_module>
ThreadStackSize 8388608
ThreadsPerChild 170
MaxRequestsPerChild 0
#Win32DisableAcceptEx
</IfModule>
我在 apache 的 error_log 中得到了什么:
[Thu Dec 01 18:23:04.459113 2016] [mpm_winnt:notice] [pid 3396:tid 288] AH00354: Child: 启动 200 个工作线程。
[Thu Dec 01 18:23:04.459113 2016] [mpm_winnt:crit] [pid 3396:tid 288] (OS 8)没有足够的存储空间来处理这个命令。:AH00355:孩子:CreateThread 失败。无法创建所有工作线程。在使用 ThreadsPerChild 配置指令请求的 200 个线程中创建了 190 个。
[Thu Dec 01 18:23:04.474714 2016] [mpm_winnt:notice] [pid 3644:tid 380] AH00422: Parent: Received shutdown signal --
编辑:2016 年 12 月 9 日:
按照此页面https://support.microsoft.com/en-us/kb/106167将注册表中的 IRPStackSize 更改为 20 和 25。仍然无法启动 Apache 服务器。
谢谢。
任何系统上的多处理模块 (mpm) 的线程配置都受到一定的限制、系统限制和编译的故障安全设置,如Apache MPM 通用指令一文中所述
ThreadsPerChild 指令
ThreadLimit 指令
他们还指出...
还有一个硬编码的编译限制,您可以通过重新编译代码来规避,如下所述:
ThreadStackSize 指令
哪个是...
解决方案
如果要增加 ThreadsPerChild 指令,则必须将 ThreadLimit 指令对齐到相同的值或仅略高一点,同时另外将 ThreadStackSize 指令降低到比默认值低的值,同时仍保持系统稳定。
一个可能的解决方案是:
您将不得不对这些值进行一些调整,以确定允许您以最大可能的 ThreadsPerChild 设置运行稳定系统的设置。
这个人说,通过使用 64 位 Windows 和 Apache,他们能够最大化他们的
ThreadsPerChild
.https://www.apachelounge.com/viewtopic.php?t=5754