PHP 5.4にUpgradeしたら、memory_limitの設定でハマった

nginx_php-frpm_crashPHPを5.4にUpdateしたら、特定のページだけ処理が途中で止まる現象でハマったときの覚書。

環境: CentOS 5.8 x64, nginx 1.2.6, php-fpm 5.4.10, APC 3.1.13

各エラーログは下記。

# tail /var/log/php-fpm/error.log

[18-Jan-2013 14:11:09] WARNING: [pool www] child 19159 exited on signal 11 (SIGSEGV) after 4633.754542 seconds from start
[18-Jan-2013 14:11:09] NOTICE: [pool www] child 23016 started

# tail /var/log/nginx/error.log

2013/01/18 14:11:09 [error] 19408#0: *39283 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 49.96.40.53, server: hoge.jp, request: "POST /hoge.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "hoge.jp", referrer: https://hoge.jp/

# tail /var/log/messages

Jan 18 13:49:59 www kernel: php-fpm[21311] general protection rip:5a6a1c rsp:7fffebd20c60 error:0

これらのログが言っていることは
「予期せぬエラーでphp-fpmが停止しました」
ということ。

社内の開発環境ではこの現象が起きない。。。

何かの設定の違いかなとphp.iniを眺めていて、php.iniの
memory_limit = 256M
に対して、APCは
apc.shm_size=512M
になっていたので、

memory_limit = 512M
に変更してみると。。。

直ったっぽい。

単純にメモリが足りてなかったのか、memory_limit >= apc.shm_sizeの関係でなければならないのかは謎。

※PHP 5.3では起きなかった。

 

< 2013/02/19 Modified >
メモリ関連の設定が甘かったみたい。下記記事を参考にプロセス数など設定し直す必要がありそう。

 

< Related Posts >