Как мне увеличить размер стека для Apache, работающего под Windows 7?

Я думаю, что получаю переполнение стека при запуске приложения cakePHP на сервере Apache под Windows 7.

1 ответ

Эта проблема чаще возникает на платформе Windows из-за меньшего размера стека Apache по умолчанию. В Windows размер стека по умолчанию составляет 1 МБ, в отличие от 8 МБ на платформах Unix/Linux. Это может быть причиной того, почему некоторые, например, PHP-скрипты работают правильно в Linux, но вызывают сбой Apache в Windows.

Кроме того, сбой происходит тихо (ошибка сегментации), сообщения об ошибках нет, Apache просто перестает отвечать, а дочерний процесс перезапускается. Браузер не получает данных и отображает пустую страницу, поэтому немного сложно решить, что же не так.

Это распространенная проблема при работе с длинными регулярными выражениями в PHP.

В журнале ошибок Apache есть только одно сообщение о том, что дочерний процесс завершился сбоем:

Parent: child process exited with status ... -- Restarting

Лучший способ изменить размер стека Apache - использовать директиву ThreadStackSize в файле конфигурации Apache. Описание документации ThreadStackSize приведено в документации Apache: http://httpd.apache.org/docs/2.2/mod/mpm_common.html.

Таким образом, увеличение размера стека Apache в Windows может выглядеть так:

<IfModule mpm_winnt_module>
   ThreadStackSize 8388608
</IfModule>

Эти строки должны быть помещены в файл конфигурации Apache. Для простоты вы можете поместить его в httpd.conf. Или лучше (но не обязательно), поместите его в файл httpd-mpm.conf и в httpd.conf раскомментируйте эту строку:

Include conf/extra/httpd-mpm.conf

Он устанавливает размер стека Apache равным 8 МБ, поэтому он равен значению по умолчанию в Linux.

И не забудьте перезапустить Apache! :)

Другие вопросы по тегам