【PHP】Unable to allocate memory for pool エラーでphpMyAdminが閲覧できなかった場合の対策
2018/05/21
ある日、さっきまで閲覧していたphpMyAdminが真っ白画面になる事態に陥りました。
復旧までの作業を忘備録としてポストします。
Unable to allocate memory for poolが出た
apacheログの確認で原因究明
ブラウザ、PCの再起動など何をやっても復帰しないと思ったら、1時間ほどしたらいきなり復帰するという始末。
これはサーバ側の問題か、と思ってApacheのログを確認してみると大当たり。
[Tue Jul 01 16:17:52 2014] [error] [client ***.***.***.***] PHP Warning: require_once(): Unable to allocate memory for pool. in /home/homepage/public_html/sys/phpMyAdmin/index.php on line 13, referer: http://*******.net/sys/phpMyAdmin/
このようなエラーログが見つかりました。
どうやら「Unable to allocate memory for pool」が原因っぽい。
対策
「Unable to allocate memory for pool」で検索しますと以下のサイトなどがヒット。
http://d.hatena.ne.jp/nao550/20140123/p1
http://junrei.dip.jp/wordpress/php/php-warning-include-unable-to-allocate-memory-for-pool/
もう、そのまんまですね。
ということで対策。
対策1
/etc/php.d/apc.iniの編集。
apc.mmap_file_mask=/tmp/apc.XXXXX
↓
apc.mmap_file_mask=/dev/zero
対策2
apc.shm_sizeを変更。
『Unable to allocate memory for pool.』は「メモリを割り当てられませんよ」ということなので、
apc.shm_size=64M
↓
apc.shm_size=128M
と割り当てを変更。
結果
上記の対応で数日間放置してみましたが error_log にエラーが出力されなくなりました。
あー良かった。
対策3 (2016.06.02追記)
上記処理をしてるにもかかわらず、再び同じ状況に陥ってしまいました。
ということで、対策3。
「Unable to allocate memory for pool.」を詳しく調べると、APCのメモリー不足によるエラーのようです。
APCとは Alternative PHP Cache の略で、PHPの中間コードのキャッシュや最適化を行う拡張モジュールのことらしいです。
APCは .htaccess にて 使う、使わないを制御できるので、以下内容を .htaccess に記述。
1 |
php_flag apc.cache_by_default Off |
これでしばらくは幸せになれることと思います。