Как мне увеличить размер стека для 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! :)