
Linuxキャッシュとスワップメモリに問題があります。私はLinuxがディスクからデータを読み取るとき(RAMにバッファリングする)それ自体を最適化していることを知っていますが、私の場合、このメモリ部分はアプリケーションがスワップ領域を使用するように見えるので、アプリケーションは非常に遅く実行され始めます。 (私の問題は次のとおりです)。 Linux上で実行されているJavaサーバー)。出力は次のとおりです。
[glassfish@pahod001 logs]$ free -m
total used free shared buffers cached
Mem: 32108 31031 1076 1 452 14980
-/+ buffers/cache: 15598 16509
Swap: 8191 49 8142
今、すべてがほぼ解決されたようです。キャッシュを含めても、1076 MB の RAM を使用できます。しかし、しばらくして(Javaサーバーが再起動されてからの時間の計算 - >約2日間)、Javaプロセスはスワップスペースの使用を開始しました(で見ることができます/proc/<proc id>/status
)。今朝は10MBのRAMを使い始め、キャッシュされたデータはほぼ15GBです。 Linuxが実際にアプリケーションに必要なメモリよりもキャッシュメモリに優先順位を付けてスワップに移動するのはなぜですか?スワップを無効にする必要がありますか?システムの稼働時間は737日です(重要なサーバーです)。キャッシュに何かがかかって手動でクリーンアップする必要がありますか?本番サーバーなので、すべての作業を慎重に実行する必要があります。
2日前に再起動したプロセスはすでにスワップを使用しており、現在15,5 GBの空きRAMがあります。このようなキャッシュメモリの管理方法は理解できません...
[glassfish@pahod001 logs]$ cat /proc/20122/status
Name: java
State: S (sleeping)
Tgid: 20122
Pid: 20122
PPid: 1
TracerPid: 0
Uid: 537 537 537 537
Gid: 537 537 537 537
Utrace: 0
FDSize: 256
Groups: 537
VmPeak: 5995004 kB
VmSize: 5995000 kB
VmLck: 0 kB
VmHWM: 1017892 kB
VmRSS: 759988 kB
VmData: 5843144 kB
VmStk: 88 kB
VmExe: 4 kB
VmLib: 16624 kB
VmPTE: 2600 kB
VmSwap: 2844 kB
答え1
Javaが6GB(ほぼすべてのデータ)を占有し、3MB(0.0005%)のスワップスペースが心配ですか? 46MBの使用済みスワップスペースはどうですか?いいえこのプロセスの場合 - 何を使用し、どのくらいの頻度で使用しますか?
もちろん、キャッシュの目的でアクティブなプロセスを交換しないでください。ただし、この3MBのJavaは数日前にロードされたため、使用されていない可能性があります。実際に何でも交換しているという事実はわかりません。交換するアルゴリズムがRAMをよりよく利用できると判断するだけです。
Javaが6GBを永久に予約する必要がある理由を説明できますか?私はビューにメモリリークがあるか、アルゴリズムがビッグデータに対して許可されていない動作をしているようです。
システム全体のより広い診断ビューを提供する必要があると思いますが、RHELはありません。