web-dev-qa-db-ja.com

ApachehttpdプロセスとPHPメモリ不足

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がより少ないメモリを消費するようにするにはどうすればよいですか?応答が遅くなる代わりにメモリを節約できませんか?

4
Ofri

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を編集して、サーバーの動作を確認します。

  • MaxKeepAliveRequests 100
  • KeepAliveTimeout 15
  • MinSpareServers 5
  • MaxSpareServers 10
  • StartServers 5
  • MaxClients 150
  • MaxRequestsPerChild 300

Drupalはシステムを大量に消費するため、最終的にVPSを512MBにアップグレードする可能性があることに注意してください。

-ブレンダン

2
bmurtagh