【PHP】Fatal Error : Allowed memory size of ○○ bytes exhausted と表示が出た時の対処法
PHPでサービスを作っていると、時たまメモリが足りなくて
[ps]
Fatal Error
Error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 47284224 bytes)
File: /Applications/MAMP/htdocs/www/app/View/Layouts/index.ctp
Line: 210
Notice: If you want to customize this error message, create app/View/Errors/fatal_error.ctp
[/ps]
こんな感じのエラーが出る事がある。
これはPHPが利用できるメモリ制限を超えてしまった時に起こるエラーで、php.iniのmemory_limitで設定できる。
php メモリ設定
php.ini
[ps]
; Maximum input variable nesting level
; http://www.php.net/manual/en/info.configuration.php#ini.max-input-nesting-level
;max_input_nesting_level = 64
; Maximum amount of memory a script may consume (128MB)
; http://www.php.net/manual/en/ini.core.php#ini.memory-limit
memory_limit = 128M
[/ps]
php.ini内で、/memory_limit と打つと該当箇所まで行けるので、その設定値を変更。
値は色々設定できて、
memory_limit = 512M
memory_limit = 256M
memory_limit = 128M
と上げれば上げるほど、phpの使用可能メモリが増える。
設定したら、Apacheを
service httpd restart
で再起動する。
また無制限にメモリを使用したい場合は、
memory_limit = -1
と書けば、無限に利用できる。
メモリを低くする理由
ここで、思ったのは、メモリを無制限に設定できるのであれば、全てのwebアプリで無制限にすれば良いのではないか?ということ。
しかしそれには理由があって、スクリプトの記述ミスで、無駄にメモリを消費すると、同時に繋いでいる他のユーザーに影響する可能性があるため、標準の設定ではメモリの設定を低くし、プログラムのミスを発見しやすくしておくのが良いらしい。
本番環境では「無制限」に設定する事も結構あるらしいし、僕も本番環境では無制限に設定する事がほとんど。
それに、何か不具合が起きないよう、ある一定のメモリ数を超えた時に、ログを残す様に設定をしたりすると良いらしいです。