此问题在 Windows 平台上更常见,因为 Apache 的默认堆栈大小较小。 Windows 上的默认堆栈大小为 1 MB,而 Unix/Linux 平台上的默认堆栈大小为 8 MB。这可能是为什么某些脚本(例如 PHP 脚本)在 Linux 上运行正常,但在 Windows 上导致 Apache 崩溃的原因。
此外,崩溃是无声的(分段故障),没有错误消息,Apache 只是停止响应并重新启动子进程。浏览器无法获取数据并呈现空白页面,因此很难确定问题所在。
这是工作时的常见问题PHP 中的长正则表达式.
Apache 的错误日志中只有一条通知,表明子进程崩溃了:
Parent: child process exited with status ... -- Restarting
改变 Apache 堆栈大小的最佳方法是使用线程堆栈大小Apache 配置文件中的指令。有一个描述线程堆栈大小Apache 文档中的指令:http://httpd.apache.org/docs/2.2/mod/mpm_common.html#ThreadStackSize http://httpd.apache.org/docs/2.2/mod/mpm_common.html#ThreadStackSize
因此,在 Windows 上增加 Apache 堆栈大小可能如下所示:
<IfModule mpm_winnt_module>
ThreadStackSize 8388608
</IfModule>
这些行应该放在 Apache 的配置文件中。为简单起见,您可以将其放入httpd.conf。或者更好(但不是必需的),把它放在httpd-mpm.conf文件并在httpd.conf取消注释这一行:
Include conf/extra/httpd-mpm.conf
它将 Apache 的堆栈大小设置为 8 MB,因此与 Linux 上的默认值相同。
并且不要忘记重新启动 Apache! :)