256GBのメモリ/ 48コアのLinux-マシンが大量のメモリを残してスラッシング/チョークを開始


12

マシン:Dell r815、CentOS 5.4、256GBのRAM、4 x 12コア。

275GBのファイルを持つアプリケーションがあります。一度に20GBのデータに対してインプレースソートを実行します。つまり、ビットを入れ替えて同じファイル内で置き換えます。これはすべて正常に動作します。

最後のパスでは、ファイル全体を読み取り、20GBの異なるチャンクでマージソートを実行し、それらをまったく新しいファイルに出力します。

このプロセスは、しばらくの間正常に動作するためにSEEMSを実行し、最終的にディスクに約50GBをフラッシュします。この後しばらくして、完全なマシンがフリークアウトし始めます。

以下のような単純なコマンドはps -efls -al長い時間のためにハングアップすると(ただ一つのコアである)、100%のCPUを取るように表示されます。

のメモリ統計topを見ると、約120GBのRAM(128GBの空き容量)を使用しており、「キャッシュ」セクションの下に120GBあることがわかります。

誰もこのような行動を見たことがありますか?64GBのメモリを搭載したマシンでも同じプロセスが正常に実行されます。そのため、マシンに搭載されているRAMのマウントに何らかの関係があると思います。

(私たちが話すように、ハードウェアの問題を除外するために、64GBを除くすべてでこのマシンでテストを実行しています)。

おそらくいくつかのvmパラメータが欠落してい/etc/sysctrl.confますか?

ありがとう!


ディスクは何をしていますか。
アレンスター

64ビットkernel / app / etc?あなたは100%のCPU、それが起こったときの負荷平均は何ですか、それはマルチスレッドのアプリです(そうでない場合はすべてのプロセッサを使用しません)、vmstat 4はあなたに伝えます(特にio / cpu)
-coredump

これは「ps」のようにCPUが100%CPUが4800%から外れているためです(48コアのため)。ボックスの負荷平均は5にすぎません。ソリッドステートのディスクには多くの書き込みが表示されません...リソースよりもカーネルの問題のようです
-aspitzer

マシンはまったくスワップしていません。
アスピッツァー

1
ええ、今64GBで実行しています。マシンのmemの合計量に関連する場合は1時間以内に知る必要があります
-aspitzer

回答:


12

あなたの質問は、私が最近読んだことを思い出させてくれました。

http://jcole.us/blog/archives/2010/09/28/mysql-swap-insanity-and-the-numa-architecture/

これは、NUMAアーキテクチャ(たとえば48コアAMDシステムで見られるような)がメモリの割り当てとスワッピングにどのように影響するかを示します。これがあなたが実行しているものであるかどうかはわかりませんが、読む価値があるほど十分に似ているように聞こえました。

たとえそれが答えでなくても、魅力的な読書になります。


1
これは、この質問の問題にふさわしいショットのようです。そして、それは素晴らしい読書です。
コアダンプ

1
これは優れた読み取りであり、4ソケット、ノードあたり256GbのRAM = 64Gbであり、問​​題が発生しているようです。これにより、ドキュメントの状況が正確に再現されます。
マークヘンダーソン

12

したがって、これは64ビットCentos 5.4および64ビットFedora 14のカーネルバグのように見えました。Centos5.5をインストールすると、問題はなくなりました。

すみません、みんなにもっと良い答えがありません...


1
ねえ、それがそれを修正したものなら、それはそれを修正したものです。他の人があなたの困難から学ぶことができるように、自分にチェックマークを付けてください:
mfinni

0

/etc/sysctl.confに行を追加して、絶対に必要な場合にのみスワップを使用するように指定できます。

swappiness = 0

このファイルがグローバル設定を定義していることを既にご存じかもしれません。そのため、この変更が環境で実行されている他のアプリケーションに与える影響を考慮する必要があります。


それは既に設定されています...しかし、私が述べたように、128GBの空きがあります-したがって、スワップの問題にぶつかることはありません。
-aspitzer

0

一時スペースはどこですか。多くの場合、tempfs上にあります。tempfsは、スワップスペースによってバックアップされたメモリからスペースを取得します。したがって、tempfsの内容が多くなりすぎると、スワップI / Oがトリガーされます。

マージするデータのサイズを考えると、最終的なマージを実行するときのスワップ性が期待できます。

スワップストレージを複数のディスクに分散すると役立つ場合があります。


0

スワップをヒットしていない場合でも、I / Oに縛られている可能性があります。ls情報はこれを示唆しています。

出力を見て、dstat -dfディスクの統計情報を表示しdstat -afます(すべての列のCPU使用率を表示し、48個のコアがあり、これが何十億の列幅になります)。

すべてのCPUがビジーであった場合(マージの並べ替えはCPUを集中的に使用するタスクではありません)、驚くでしょうが、I / Oシステムについては何も言いません。ディスクが少なく、ファイルがたくさんある場合は、ディスクをスラッシングして、各ファイルへのシークを行い、マージソートを維持します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.