Linux サーバーの応答が非常に遅いです。CPUtop
使用率は高くありません。空きメモリが約 5 GB あるにもかかわらず、システムがスワップをすべて使用しており、空きスワップが残っていないことに気付きました。これがシステムの動作が遅い原因でしょうか? プロセス数を減らす以外に解決策はありますか?
第二に、空きメモリがあるのに、Linux がすでにスワップしているのはなぜでしょうか? スワップは実際のメモリが残っていない場合にのみ使用されるものだと思っていました。
free -m
total used free shared buffers cached
Mem: 32045 26218 5826 0 127 123
-/+ buffers/cache: 25967 6077
Swap: 16387 16387 0
アップデート:
- swapiness はデフォルトレベル: 60
- ヌマシステムではないと思う
- 8GB のヒープで実行されている Java プロセスがいくつかあるのがわかります。
-Xms8000m -Xmx8000m
一見するとおかしいように思えますが、おそらく誰かがこれを行う理由があったのでしょう。これがスワップの大部分を消費しているものだと思いますが、Java ヒープが Linux スワップとメモリ/パフォーマンス全般にどのように影響するかをさらに調査する必要があります。上記の Java ヒープ構成がシステム パフォーマンスに与える影響についてのヒントがあれば、非常に役立ちます。
答え1
8GB ヒープで初期化された Java プロセスはいくつありますか? 最大数を 8 にして、初期ヒープ サイズを小さくしてください。ディスク容量に余裕がある場合は、スワップ サイズも増やしてみてください。
答え2
マウントはありますかtmpfs
? これらはスワップによってバックアップされており、使用可能なスワップ領域がゼロになる原因となっている可能性があります。予期しない動作syslog
やdmesg
表示がありますか? システムが常にスワップを実行していないことを確認していますか?vmstat -SK 1
列si
とso
(KB/秒単位でのスワップされたページ インとスワップ アウト) をチェックして検証します。どのプロセスがスワップを実行しているかを知る必要がある場合は、 を実行しますsudo iotop -od5
。Ubuntu を実行している場合は、完全な統計情報を得るにはカーネル フラグが必要ですdelayacct
。私の場合、システムのキャッシュとバッファーは、システム メモリが非常に大きいのに非常に小さいようです。
スワップは、システム全体のパフォーマンスを向上させるために使用されます。この例としては、現在スリープ状態の大きなプログラムの一部をスワップアウトして、ディスク キャッシュまたはファイル バッファにより多くのメモリを使用できるようにすることが挙げられます。この場合、スワップを無効にすると、システムのディスク キャッシュとファイル バッファは実質的に小さくなります。スワップ領域がいっぱいになると、実質的に同じ問題が発生する可能性があります。
メモリを「リーク」するプログラムがある場合 (つまり、実際には使用されていないメモリ ブロックをプログラムが取得する場合)、スワップ領域は特に重要です。このような「リーク」はプログラム内のエラーではない可能性があり、メモリがめったに使用されないため、リークとして処理した方がよい場合があります。スワップ領域がないと、このようなリークされたメモリをキャッシュやバッファとして使用することはできません。
仮想メモリを使用して正常に動作している OS は、システムの実行時間全体にわたってワーキング セット全体 (アクセスされたすべてのファイル、アプリケーションによって予約されたすべてのメモリ、およびすべての書き込みバッファ) がメモリに完全に収まらない限り、ほぼ常にスワップを使用しています。ほとんどの場合、これは、システムが頻繁に再起動されるか、ファイルシステム全体のサイズに比べてシステムの RAM の量が膨大である場合にのみ当てはまります。