web-dev-qa-db-ja.com

実行中のhttpdプロセスが多すぎてCentOSサーバーがフリーズする

メディアテンプルがホストする専用仮想16 GB RAM CentOSサーバー)で高トラフィックのWebサイトを実行しています。
CPU使用率が高いためにサーバーが停止することがよくあります(%1500)
「top」コマンドを使用して実行中のプロセスを確認すると、実行中のhttpdプロセスが多すぎるため、CPUの使用率が高くなっていると思います。
mysqlを調整しようとしましたが、Apache、my.cnf、httpd.cnfを調整しましたが、使用していないが問題を解決しないApacheモジュールを削除しました。
問題の診断に役立つように、サーバー構成で知っておく必要のある値を教えてください。
前もって感謝します。

5
sunn

システム負荷が高い場合、tail -f /var/log/messagesは何と言いますか?

プロセスは非常にI/OまたはCPUを集中的に使用していますか?

1つの観察:

18Gの物理メモリを持っているようですが、スワップ領域がゼロです...、たとえばtopコマンドに「Swap:0k total」と表示されます...これは、スワップスペースが構成されていないことを意味します。

一般に、UNIXシステムでは常に十分なスワップ領域が必要です。スワップサイズ= 1 ... 2回RAMサイズは良い考えです。高速パーティションを使用することは良い考えです。 UNIXシステムでRAMが不足し、Swapがありません..プロセスが不可解に終了するだけです。これは、特に本番環境では非常に悪いことです。ディスクは安価です!十分なスワップパーティションを追加してください!:-)または最悪の場合、後でスワップファイルを作成することもできます。

どのUNIXシステムでも、スワップ領域が必要です。これは、CPUの1つでスケジュールされていないプロセスが存在するためです。スワップ領域がない場合、システムは新しいプロセスを作成する場所(RAM)を使い果たすため、本当に悪いことが起こります-何もないため、スワップに入れることができないため、負荷が非常に高く、システムがフリーズし、プロセスが一見不可解に死ぬ。

使用中のメモリとスワップ領域を確認するには、free -kを実行します。 swapon -s ..を実行して、スワップ構成を確認することもできます。スワップが構成されていない場合、出力は表示されません。

経験則として、スワップスペースを物理メモリのサイズの約1..2倍に構成します。18G RAMがある場合、 〜20..30Gのスワップを構成します。「ディスクはダートチープ」であるため、スワップでけちにしないでください。

免責事項:スワップなしで実行できる場合はいくつかの例外がありますが、一方で、構成して不要であっても問題はありません。 :)

スワップ空間を作成するための2つの選択肢:

  • できれば最速のディスクパーティションにスワップパーティションを作成します(最適な選択、または物理サーバーにフラッシュドライブを追加します)。

  • または、スワップファイルを作成します(パーティションを作成するためのディスク領域が残っていない場合。これは、予想よりも多くのスワップが必要であることが後で判明した場合にも適切なオプションです)

...次に、パーティションまたはスワップファイルをスワップして、mkswapコマンドでスワップできるようにします。

Sudo swapon -aでスワップスペースを有効にすると、topswapon -sにリストされ、スワップシステムがより適切に動作するはずです。

スワップスペースに関する記事:

https://www.linux.com/news/software/applications/8208-all-about-linux-swap-space

https://www.linux.com/learn/tutorials/442430-increase-your-available-swap-space-with-a-swap-file

http://www.cyberciti.biz/faq/linux-add-a-swap-file-howto/

http://www.thegeekstuff.com/2010/08/how-to-add-swap-space/

http://lissot.net/partition/partition-08.html

http://tldp.org/LDP/sag/html/swap-space.html

いくつかのポインタ:

man -k swap

man mkswap

man fstabvim /etc/fstab


[〜#〜]編集[〜#〜]

この質問はServerFaultに移行されたので、..ここにコメントを追加します。これは、pplが古いルールを引用していると文句を言っているためです: "1..2-times RAM size == Swap size 」

最近の2TB SATAドライブのコストは約$ 70です。つまり、20GBのコストは約70セントです。私は20GBがたくさん聞こえることを知っていますが、それを非常に安価な「最悪の場合の保険」と考えてください!

誰かが言った:「あなたのシステムが18GBを使い果たして20GBにスワップしているなら、あなたはより大きな問題を抱えている」

確かにそうですが、予期しない問題が発生した場合に十分なスワップスペースがあれば、サーバーとその上のプロセスが完全にクラッシュするのを防ぐことができます。ログイン、システムの実行中のシステムの検査(遅い)、修復(遅い)が可能で、再起動する必要がない場合もあります。本番サーバーでは、寛大なスワップを使用しない理由はありません。 。

私が18GBのサーバーを持っている場合RAMそしてそれは例えばMongoDBを実行しています(これは非常にRAM集中的です)..)確かに非常に寛大なスワップスペースを設定します、たぶん40..60GB ...予期しない問題が発生した場合に備えて.

7
Tilo

あなたの場合、スワップは必要ありません。必要に応じて、1〜2 GBのスワップパーティションまたはファイルを作成して、ファイルシステムキャッシュ用の物理メモリを増やすことができます。

キャッシュメモリとバッファメモリが0である理由がわかりません。cat /proc/meminfoの出力を貼り付けられますか?

I/O負荷が非常に高い。これは、ディスクまたはネットワークです。負荷を減らすようにしてください。ディスクマウントの場合、noatime. Try to find out which process is most I/O intensive. Useiotop anddstat`を使用してデータパーティションをマウントします。

ファームウェアとディスクコントローラとネットワークカードのダイバー(カーネルモジュール)をアップグレードしてみてください。 VMを実行している場合は、準仮想化ドライバー(VMware Toolsなど)をインストールしていることを確認してください。PAEで32ビットのカーネルを実行している場合は、64ビットのディストリビューションに切り替えてみてください(カーネル時間から)。

0

ほぼ確実に、マシンがメモリ不足になっているのは、ほとんどまたはまったく作業を行わない「ファット」Apacheプロセスが多すぎるためです。

Apacheは通常「プリフォーク」モデルを使用します。 PHPは通常、インプロセスで実行されます。次の理由により、これは問題になることがあります。

  • PHPは、Apacheの子プロセスにそれぞれ大量のメモリを使用させます。
  • 低速の接続で静的ファイルを提供し、子プロセスを理由なく長期間使用し続ける
  • HTTPキープアライブをオンにすると、子プロセスも使用されたままになります。

「悪い」解決策は、キープアライブをオフにすることです(またはキープアライブ時間を短縮することもできます)。キープアライブは、特にHTTPSのパフォーマンスにとって非常に優れていることに注意してください。

「より良い」ソリューションは、より優れたアーキテクチャに切り替えることです。より優れたアーキテクチャは、何もしない「ファット」プロセスを無駄にしないアーキテクチャです。より良いアーキテクチャの典型的な実装は、Nginx + PHP/FastCGIです。

私は必ずしもNginxの使用を推奨しているわけではありません-別のMPM(マルチプロセッシングモジュール(例:ワーカー、イベント、プリフォークではない))を実行してPHP out -FastCGIによるプロセスの。

0
MarkR