【问题标题】:How do I increase the stack size for Apache running under Windows 7?如何增加在 Windows 7 下运行的 Apache 的堆栈大小?
【发布时间】:2011-06-30 20:08:37
【问题描述】:

我认为我在 Windows 7 下的 Apache 服务器上运行 cakePHP 应用程序时出现堆栈溢出。

【问题讨论】:

  • 需要更多信息。究竟什么地方会崩溃并显示什么错误消息?
  • 没有崩溃,只是 Apache 发送到浏览器的空白页面。我认为这是堆栈溢出,因为它仅在我为调试加载 zend_extensions 时发生,这会增加堆栈深度。就在apache下的应用放弃之前,栈深度是99,不算zend。没有错误信息。

标签: apache stack-overflow windows-7-x64


【解决方案1】:

由于 Apache 的默认堆栈大小较小,此问题在 Windows 平台上更常见。 Windows 上的默认堆栈大小为 1 MB,与 Unix/Linux 平台上的 8 MB 不同。这可能是一个原因,例如一些 PHP 脚本在 Linux 上正常工作,但导致 Apache 在 Windows 上崩溃。

此外,崩溃是静默的(segmentation fault),没有错误消息,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! :)

【讨论】:

  • 这对我有用,我的日志中什至没有错误,只是进程成功退出。
  • @Freek,你的Apache LogLevel是什么?
  • 我收到此通知,但增加 ThreadStackSize 对我不起作用...有一个特定的应用程序破坏了我的 Apache,我无法弄清楚:/
  • 嗯,有多种原因。您未能正确配置它(没有重新启动 Apache,使用了错误的配置文件等),应用程序甚至需要超过 8 MB 的堆栈(或您配置的任何内容),或者它甚至可能包含无限循环,所以它会吃掉堆栈,不管它有多大。或者您可能有完全不同的问题根源。尝试本地化导致问题的应用程序部分。
  • 这解决了我的问题!我在 Windows 上使用 Symfony 时遇到了堆栈溢出。我在 Symfony 日志或 Apache 中没有错误,只是 Apache 重新启动的信息,但 Windows 日志显示 httpd.exe 正在崩溃。经过大量试验和错误后,我确定我在整个应用程序中的路由参数过多,但我设置了 ThreadStackSize,一切都很好!
猜你喜欢
  • 2016-03-06
  • 2010-09-14
  • 2021-04-02
  • 2015-11-22
  • 2013-12-24
  • 2011-09-29
  • 2015-08-14
  • 2010-11-24
相关资源
最近更新 更多