Apache错误日志
[mpm_winnt:notice] [pid 22752:tid 1076] AH00428: Parent: child process 35484 exited with status 3221226356 -- Restarting.
然后Apache就时不时处于重启状态,导致网站服务经常宕机
产生的原因
这个问题经常发生在Windows中,因为Apache较小,默认堆栈大小。这通常发生在处理php代码时
这会分配很多堆栈。
解决办法
要解决此问题,请在apache 配置文件 \conf\extra\httpd-mpm.conf 中设置 ThreadStackSize 值设置大一点,没有这个配置则添加下。当然此配置开启了mpm下才会用到这个配置文件
<IfModule mpm_winnt_module>
ThreadsPerChild 200
MaxConnectionsPerChild 0
ThreadStackSize 8888888
</IfModule>
ThreadStackSize 指令说明
说明 |
处理客户端连接的线程使用的栈尺寸(字节) |
语法 |
ThreadStackSize size |
默认值 |
NetWare上为65536;其它平台上等于操作系统默认值 |
作用域 |
server config |
状态 |
MPM |
模块 |
mpm_netware, mpm_winnt, worker |
兼容性 |
仅在 Apache 2.1 及以后的版本中可用 |
ThreadStackSize指令设置了处理客户端连接(包括调用模块以协助处理)的线程允许使用的最大栈尺寸(字节)。在大多数情况下,操作系统默认的栈尺寸很合理,但是在某些情况下,需要调整这个值
在默认栈尺寸较小的平台上(比如HP-UX),Apache可能会在使用一些需要较大栈尺寸的第三方模块时崩溃。这样的问题可以通过将ThreadStackSize设置为一个较大的值来解决。这种调整应当仅仅在第三方模块提供者明确要求的情况下才需要,或者是您通过诊断确定是由于栈空间太小而导致崩溃。
在某些平台上,如果默认的栈空间大于服务器运行所需空间,那么将ThreadStackSize值降低到小于操作系统默认值可以让每个进程中允许生成的最大线程数量增加。这种类型的调整应该仅在测试环境中使用,并且对所有服务器进程进行充分的测试,因为处理某些罕见的请求需要较大的栈空间。一个很小的服务器配置变化就有可能使得当前的ThreadStackSize设置变得不合适。