apache .htaccess

Apache PHP

【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」で検索しますと以下のサイトなどがヒット。

もう、そのまんまですね。
ということで対策。

対策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 に記述。

これでしばらくは幸せになれることと思います。

-Apache, PHP
-,