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
更新:
-Xms8000m -Xmx8000m
一見ナッツのようですが、おそらく誰かがこれを行う理由がありました。これがスワップの大部分を消費していると思いますが、JavaヒープがLinuxスワップとメモリ/パフォーマンスにどのように影響するかをさらに調査する必要があります。上記の影響に関するポインタJavaシステムパフォーマンスのヒープ構成は非常に役立ちます。
いくつのJavaプロセスが8GBヒープで初期化されていますか?おそらく最大値を8に保ち、初期ヒープサイズを小さくしてください。ディスク容量がある場合は、スワップサイズも増やしてみてください
tmpfs
マウントはありますか?これらはスワップによってバックアップされ、使用可能なスワップスペースがゼロになる原因となる可能性があります。 syslog
またはdmesg
は予期しない何かを示していますか?システムが常に交換されていないことを確認しますか? vmstat -SK 1
をチェックし、列si
とso
(KB /秒でページをスワップインおよびスワップアウト)を確認します。スワップしているプロセスを知る必要がある場合は、Sudo iotop -od5
を実行します。 Ubuntuを実行している場合、完全な統計情報を得るにはdelayacct
カーネルフラグが必要です。私にとって、あなたのシステムは、そのような大きなシステムメモリのために本当に小さなキャッシュとバッファを持っているようです。
スワップは、システム全体のパフォーマンスを向上させるために使用されます。この例は、現在スリープしている大きなプログラムの一部をスワップアウトして、ディスクキャッシュまたはファイルバッファにより多くのメモリを使用できるようにすることです。この場合にスワップを無効にすると、システムのディスクキャッシュとファイルバッファは事実上小さくなります。スワップスペースがいっぱいであるため、同じ問題が事実上発生する可能性があります。
スワップスペースは、メモリを「リーク」するプログラムがある場合(つまり、プログラムが実際には使用されていないメモリブロックを取得する場合)に特に重要です。このような「リーク」はプログラムのエラーではない可能性があります。メモリがほとんど使用されないため、リークとして処理する方がよい場合があります。スワップスペースがないと、このようなリークされたメモリをキャッシュまたはバッファとして使用できません。
仮想メモリで正しく実行されているOSは、ワーキングセット全体(アクセスされたすべてのファイル、アプリケーションによって予約されたすべてのメモリ、およびすべての書き込みバッファ)がシステムのランタイム全体にわたってメモリに完全に収まらない限り、ほとんど常にスワップを使用しています。ほとんどの場合、これは、システムが常に再起動されるか、ファイルシステム全体のサイズと比較してシステムに大量のRAMがある場合にのみ当てはまります。