我认为我在Windows 7下的Apache服务器上运行的是一个堆栈溢出运行cakePHP应用程序。
答案 0 :(得分:67)
在Windows平台上更常出现此问题,因为Apache的默认堆栈大小较小。 Windows上有1 MB的默认堆栈大小,与Unix / Linux平台上的8 MB不同。这可能是一个原因,为什么一些例如PHP脚本在Linux上正常工作,但导致Apache在Windows上崩溃。
此外,崩溃是无声的(分段错误),没有错误消息,Apache只是停止响应并重新启动子进程。浏览器没有数据并呈现空白页面,因此确定错误是有点困难。
在PHP中使用长正则表达式时,这是一个常见问题。
只有Apache的错误日志中有一个通知,告诉我,子进程崩溃了:
Parent: child process exited with status ... -- Restarting
更改Apache堆栈大小的最佳方法是使用Apache配置文件中的 ThreadStackSize 指令。 Apache的文档中描述了 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! :)