PHP へのメモリー割り当てが少ない場合に見かけるエラー:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 65536 bytes) in ~
このような場合は、php.ini などにメモリー割り当てを多く設定することで回避できる、というのは一般的な解説。
それはわかるんだけれど、最大でどれくらい使うことができるのだろうか。というのは、馬鹿でかい数値を設定した場合や無制限と設定した場合、これが受け入れられるのか無効とみなされ、デフォルト値が使われるのかが知りたい。
調べてみると無制限という設定もあるらしい(参考:phpでmemory_limitを上限なしにする方法)。
スポンサードリンク
メモリーを調べる方法
- phpinfo();
- メモリ使用量を取得 (PHP) – シャル・システムサービス公開Wiki
- PHP: コア php.ini ディレクティブに関する説明 – Manual
- PHP: memory_get_usage – Manual
- PHP: memory_get_peak_usage – Manual
ただ、いずれも消費したなどの量のようで、どれくらいまで使用可能なのかという値ではないらしい。もしかしたら、動的に変化するから知ることはできないのかもしれない。また、phpinfo() では設定値がそのまま出てくるようで、無制限の-1 と設定した時-1 と表示される。
例えばデフォルト32M が割り当てられていて、192M は許容されるが256M にすると無効として扱われ、32M に戻るかどうかなどを知りたかったのだが。
コンソールから調査
コンソールから手っ取り早く回答を得る場合にはどうすればよいか:
php -r ‘print_r(get_defined_constants());’
シェル変数の置換と引用符の使用については特に注意してください。
注意: この例をよくみてください。開始/終了タグがありません! -r スイッチを使用した場合、これらのタグは不要と なります。これらのタグを使用するとパーサエラーを発生します。(「PHP をコマンドラインから使用する」より引用)
実行結果
%/usr/local/php -r 'print memory_get_peak_usage();' 313692 %/usr/local/php -r 'print memory_get_usage();' 318744
バイト単位で返すとのことだから、この例の場合は318,744 バイト(およそ320kb)となる。
php マニュアルには負荷をかけて測定するサンプルスクリプトも掲載されていたが… 。
ただし、何れの場合も「Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 65536 bytes) in ~」は解決しなかった。そんなにメモリーを使うような処理をしていないのだが…。 また、設定によってはKilled となる。…もう少し”理由”を教えていただけると対処の仕様もあるのだけれど…。
# ついでに以前利用できなのに現在利用できなくなったのはなぜだろう。環境変化等ないのだけれど。
コメント
RT @PHPManiaJP: [PHP] メモリーは最大どれくらい使えるのだろうかhttp://t.co/jkAuyu9A