PHP-FPM環境でAllowed memory size of * bytes exhaustedというエラーが起こる現象

システムの定時処理が実行されてなくて気付いたのですが、先日サーバのPHP周りの設定をいじってから、cronからPHPが実行されなくなってしまったようです。一方で、WebアクセスからはPHPの動作は全く問題ありません。
早速原因究明に取り掛かる事にしました。

試しにphpコマンドを打つと「Allowed memory size of 262144 bytes exhausted」というエラーが出ます。
php-fpm.d/www.confでもphp.iniでもメモリ割り当て量は256MBに設定してあり、こんなメッセージが出るはずもありません。
妙に少ないメモリ割り当て量なので、php-fpmに関連する子プロセスの設定とmemory_limitの設定が変に干渉してるのかな?と思って色々いじってみたのですが、どうしても現象が解決しません。
freeコマンドでメモリを見ても残メモリは潤沢にあります。また、freeでは問題なかったけれども、変なメモリリークでも起きておかしな事になってるのかなと思って再起動かけたりしたものの、現象は解決しませんでした。
php-fpm.dのmemory_limitがphp.iniの設定を上書きしているのは知っていたので、それをコメントアウトすると、今度はwww-error.logが大量のexhaustedエラーで埋まってしまいました。
PHPファイルにphp_ini関数でメモリを割り当てても改善しません。何か見落としてる所は無いか…と思い、この262144という数字に注目してみました。262144を1024で割ってみると、256。つまり256バイトを割り当てようとしたのだと知り、ピンと来ました。
php.iniのmemory_limitの記述は256MBにしていたのですが、この「B」が付いてるとフォーマットエラーになってしまうようです。多分これが256バイトという指定になってしまったのでしょう。
これを256Mに訂正した所、CRONでもコマンドラインでもPHPが実行できるようになりました。
それにしても疲れていたのでしょうか、php-fpmの設定がphp.iniを上書きするという意識で凝り固まっていたせいで解決まで長引いてしまいました。
nginxがウェブリクエストを捌いてphp-fpmに振ってるのと違って、コマンドラインからphpを実行してるだけなのだからphp-fpmの設定は効くわけないですね。考えてみれば当たり前でした。

1 Star2 Stars3 Stars4 Stars5 Stars (まだ投票されていません)
Loading...

    コメント