CentOSでApache-php-mysqlを実行しているVPSがあり、単一のdrupal Webサイトがインストールされています。VPSには256MBのRAM(の根本原因である可能性があります私のすべての問題...多分もっと必要なだけです)複数のブラウザタブ(約8 ... 800ではない)からWebサイトを一度に開こうとすると、Apacheがクラッシュします!これはログにあります:
[2012年10月24日水曜日11:26:31] [エラー] [クライアントxxx] PHP致命的なエラー:メモリ不足(28049408が割り当てられました)(201335バイトを割り当てようとしました)が2139行目のxxxにあります、リファラー:xxx
私はここで多くの投稿を読みましたが、私が見逃している根本的な何かがあると思います-正しく理解していれば、いくつかのphpスクリプトが28MBを割り当てた後に200Kを割り当てようとしましたが、失敗しました。
最初の質問は:これによりApacheがクラッシュするのでしょうか?
次に、ちょっとしたテストをしながら、「top」コマンドを見ようとしました。実際、7つのhttpdプロセスがあり、それぞれが約30MBを予約しています。これが、私のRAMが不足する理由を説明しています。
メモリが不足するまでApacheが新しいプロセスを作成しないようにするにはどうすればよいですか?
/etc/httpd/conf/httpd.confを次のように構成してみました。
<IfModule prefork.c>
StartServers 1
MinSpareServers 1
MaxSpareServers 1
ServerLimit 1
MaxClients 1
MaxRequestsPerChild 100
</IfModule>
しかし、まったく同じ結果が得られました!
何が足りないのですか?
どうもありがとう!
更新:
私のPHP memory_limitは128Mです(drupal管理ページ...)によって確認されました)free -mの出力:
total used free shared buffers cached
Mem: 256 226 29 0 0 0
-/+ buffers/cache: 226 29
Swap: 0 0 0
Apacheがより少ないメモリを消費するようにするにはどうすればよいですか?応答が遅くなる代わりにメモリを節約できませんか?
Drupalのバージョンに応じて:Drupal 6コアにはPHPのmemory_limitが少なくとも16MB必要です。Drupal 7コアには32MBが必要です。
エラーと28MBを割り当てた投稿に基づいて、php.iniファイルでmemory_limitが正しく設定されていることを確認してください。 php.iniに変更を適用するには、必ずApacheを再起動してください。
考慮すべきもう1つの側面は、サーバーで実行されている他のサービス、Apache、MySQLなどです。これらも合計256MBから取得されます。
現在のメモリ使用量を把握するには、次のように入力します。
free -m
-mフラグは、データをMB単位で出力します。 -bスイッチは、メモリの量をバイト単位で表示します。 -kスイッチ(デフォルトで設定)は、キロバイト単位で表示します。
次のような出力が得られます。
total used free shared buffers cached
Mem: 24031 22512 1518 0 1614 8082
-/+ buffers/cache: 12815 11215
Swap: 31999 485 31514
使用可能なメモリに応じて、問題をPHP)に絞り込むか、VPSを超えた/最大にした場合に絞り込むことができます。
[〜#〜]編集[〜#〜]
@Ofri、
Apacheの構成に正確な科学はありません。それは、マシンの仕様と主に試行錯誤を知ることに要約されます。進行中の試用期間とエラー期間中にサーバーのパフォーマンスを監視することは、ポジティブ/ネガティブな影響を確認するために重要です。
Apacheを停止し、以下の値に従ってhttpd.confを編集して、サーバーの動作を確認します。
Drupalはシステムを大量に消費するため、最終的にVPSを512MBにアップグレードする可能性があることに注意してください。
-ブレンダン