PHP で「プールにメモリを割り当てられません」というエラーが発生する原因は何ですか? 質問する

PHP で「プールにメモリを割り当てられません」というエラーが発生する原因は何ですか? 質問する

私は、特に Wordpress のような肥大化したアプリケーションでは、サーバーのメモリ割り当て制限に達することが時々ありますが、「プールにメモリを割り当てることができません」というメッセージが表示されて、情報を追跡するのに苦労したことは一度もありません。

これが何を意味するか知っている人はいますか? を増やそうとしましたが、memory_limitうまくいきませんでした。また、アプリケーションに大きな変更を加えたわけでもありません。ある日は問題がなかったのですが、次の日にはこのエラーが発生しました。

ベストアンサー1

TTLを0にすると、APCはフラッシュする。すべてのキャッシュメモリが不足すると、エラーは表示されなくなりますが、APC の効率は大幅に低下します。リスクもトラブルもなく、「仕事をしたくない」という決断です。APC はそのような使い方を意図したものではありません。最もアクセスされるページが期限切れにならないように、TTL を十分に高く設定する必要があります。最善の方法は、APC がキャッシュをフラッシュする必要がないように十分なメモリを割り当てることです。

ttl がどのように使用されるかを理解するには、マニュアルを読んでください。http://www.php.net/manual/en/apc.configuration.php#ini.apc.ttl

解決策は、APC に割り当てられるメモリを増やすことです。これを行うには、apc.shm_size を増やします。

APC が共有セグメント メモリを使用するようにコンパイルされている場合は、オペレーティング システムによって制限されます。各セグメントのシステム制限を確認するには、次のコマンドを入力します。

sysctl -a | grep -E "shmall|shmmax"

より多くのメモリを割り当てるには、apc.shm_segments パラメータを使用してセグメントの数を増やす必要があります。

APC が mmap メモリを使用している場合、制限はありません。メモリの量は、引き続き同じオプション apc.shm_size によって定義されます。

サーバーに十分なメモリがない場合は、フィルター オプションを使用して、アクセス頻度の低い PHP ファイルがキャッシュされないようにします。

ただし、TTL を 0 にしないでください。

c33s が言ったように、apc.php を使用して設定を確認してください。apc パッケージから Web フォルダにファイルをコピーし、ブラウザでそのフォルダにアクセスします。実際に割り当てられているものとその使用方法がわかります。グラフは数時間後も安定している必要があります。更新のたびにグラフが完全に変化している場合は、設定が間違っていることを意味します (APC がすべてをフラッシュしています)。セキュリティ マージンとして APC が実際に使用する RAM より 20% 多く割り当て、定期的に確認してください。

32MB しか許可しないというデフォルトは、途方もなく低いです。PHP は、サーバーが 64MB で、ほとんどのスクリプトが 1 ページにつき 1 つの PHP ファイルを使用していたときに設計されました。今日では、Magento などのソリューションは 10k 以上のファイル (APC で約 60MB) を必要とします。ほとんどの PHP ファイルが常にキャッシュされるように、十分なメモリを許可する必要があります。無駄ではありません。対応する生の PHP をファイル キャッシュに格納するよりも、オペコードを RAM に格納する方が効率的です。今日では、24GB のメモリを備えた専用サーバーを月額 80 ドルという低価格で見つけることができます。そのため、APC に数 GB を割り当てることをためらわないでください。私は、5 つの Magento ストアと約 40 の WordPress ウェブサイトをホストするサーバーに 24GB のうち 2GB を割り当てました。APC は 1.2GB を使用します。Magento のインストールに 64MB、いくつかのプラグインを含む WordPress に 40MB を数えます。

また、同じサーバー上に開発中の Web サイトがある場合は、それらをキャッシュから除外します。

おすすめ記事