web-dev-qa-db-ja.com

Windows 7で実行されているApacheのスタックサイズを増やすにはどうすればよいですか?

Windows7のApacheサーバーでcakePHPアプリケーションを実行するとスタックオーバーフローが発生していると思います。

22

この問題は、Apacheのデフォルトのスタックサイズが小さいため、Windowsプラットフォームでより頻繁に発生します。 Unix/Linuxプラットフォームの8 MBとは異なり、Windowsのデフォルトのスタックサイズは1 MBです。たとえば、PHPスクリプトはLinuxでは正しく機能しますが、WindowsではApacheがクラッシュする原因となる理由が考えられます。

さらに、クラッシュはサイレント(セグメンテーション違反)で、エラーメッセージは表示されず、Apacheは応答を停止し、子プロセスが再開されます。ブラウザーはデータを取得せず、空白のページをレンダリングするため、何が問題なのかを判断するのは少し難しいです。

これは、PHPで長い正規表現を使用する場合によくある問題です。

Apacheのエラーログにのみ、子プロセスがクラッシュしたという通知が1つあります。

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のスタックサイズを8MBに設定するため、Linuxのデフォルト値と同じです。

そしてApacheを再起動することを忘れないでください! :)