web-dev-qa-db-ja.com

Linuxの動作が遅く、スワップが0のままです

Linuxサーバーの応答が非常に遅いです。 topは過度のCPU使用率を示していません。約5GBの空きメモリがあるにもかかわらず、システムがすべてのスワップを使用していて、空きスワップが残っていないことに気付きました。これがシステムの動作が遅い理由でしょうか?プロセス数を減らす以外に解決策はありますか?

次に、使用可能な空きメモリがあるにもかかわらず、Linuxがすでにスワッピングしているのはなぜですか?スワップは、実際のメモリが残っていない場合にのみ使用されると思いました。

free -m
             total       used       free     shared    buffers     cached
Mem:         32045      26218       5826          0        127        123
-/+ buffers/cache:      25967       6077
Swap:        16387      16387          0

更新:

  • スワップ性はデフォルトレベルです:60
  • 沼システムではないと思います
  • いくつかのJavaプロセスが8GBヒープで実行されているのがわかります:-Xms8000m -Xmx8000m

一見ナッツのようですが、おそらく誰かがこれを行う理由がありました。これがスワップの大部分を消費していると思いますが、JavaヒープがLinuxスワップとメモリ/パフォーマンスにどのように影響するかをさらに調査する必要があります。上記の影響に関するポインタJavaシステムパフォーマンスのヒープ構成は非常に役立ちます。

4
haps10

いくつのJavaプロセスが8GBヒープで初期化されていますか?おそらく最大値を8に保ち、初期ヒープサイズを小さくしてください。ディスク容量がある場合は、スワップサイズも増やしてみてください

2
Al Longley

tmpfsマウントはありますか?これらはスワップによってバックアップされ、使用可能なスワップスペースがゼロになる原因となる可能性があります。 syslogまたはdmesgは予期しない何かを示していますか?システムが常に交換されていないことを確認しますか? vmstat -SK 1をチェックし、列siso(KB /秒でページをスワップインおよびスワップアウト)を確認します。スワップしているプロセスを知る必要がある場合は、Sudo iotop -od5を実行します。 Ubuntuを実行している場合、完全な統計情報を得るにはdelayacctカーネルフラグが必要です。私にとって、あなたのシステムは、そのような大きなシステムメモリのために本当に小さなキャッシュとバッファを持っているようです。

スワップは、システム全体のパフォーマンスを向上させるために使用されます。この例は、現在スリープしている大きなプログラムの一部をスワップアウトして、ディスクキャッシュまたはファイルバッファにより多くのメモリを使用できるようにすることです。この場合にスワップを無効にすると、システムのディスクキャッシュとファイルバッファは事実上小さくなります。スワップスペースがいっぱいであるため、同じ問題が事実上発生する可能性があります。

スワップスペースは、メモリを「リーク」するプログラムがある場合(つまり、プログラムが実際には使用されていないメモリブロックを取得する場合)に特に重要です。このような「リーク」はプログラムのエラーではない可能性があります。メモリがほとんど使用されないため、リークとして処理する方がよい場合があります。スワップスペースがないと、このようなリークされたメモリをキャッシュまたはバッファとして使用できません。

仮想メモリで正しく実行されているOSは、ワーキングセット全体(アクセスされたすべてのファイル、アプリケーションによって予約されたすべてのメモリ、およびすべての書き込みバッファ)がシステムのランタイム全体にわたってメモリに完全に収まらない限り、ほとんど常にスワップを使用しています。ほとんどの場合、これは、システムが常に再起動されるか、ファイルシステム全体のサイズと比較してシステムに大量のRAMがある場合にのみ当てはまります。

2