6

私は巨大な RAM を消費する Java プロセスを持っており、彼がこのすべてのメモリで何をしているのかを理解しようとしています。したがって、この PID で pmap -x を実行しています。結果の一部を次に示します。

Address           Kbytes     RSS   Dirty Mode   Mapping
0000000000001000       4       0       0 rw---    [ anon ]
0000000000400000      48       0       0 r-x--  java
000000000050b000       4       4       4 rw---  java
0000000003b9d000     264     224     212 rw---    [ anon ]
0000000003bdf000 2199556 1887992 1830160 rw---    [ anon ]
000000396c800000     112     108       0 r-x--  ld-2.5.so
000000396ca1c000       4       4       4 r----  ld-2.5.so
[...]
ffffffffff600000    8192       0       0 -----    [ anon ]
----------------  ------  ------  ------
total kB         7072968 4382820 4270104

アドレス 3BDF000 でわかるように、2199556 KBytes と 1830160 Dirty のマッピングがあります。

/proc/10139/smaps で、詳細を確認できます。

03bdf000-89fe0000 rw-p 03bdf000 00:00 0
Size:           2199556 kB
Rss:            1887996 kB
Shared_Clean:         0 kB
Shared_Dirty:         0 kB
Private_Clean:    57832 kB
Private_Dirty:  1830164 kB
Swap:            231996 kB
Pss:            1887996 kB

したがって、この汚い記憶が何であるかを知りたいですか?これらのページはディスクに書き込む必要はないと思いますが、なぜダーティと呼ばれるのでしょうか?

4

1 に答える 1

11

メモリは、このプロセス専用であることを意味するプライベート、または複数のプロセスがマップされて使用されている可能性があることを意味する共有のいずれかです (共有ライブラリ コードなどを考えてください)。メモリもクリーンである可能性があります-ディスクからロードされた後、またはゼロで埋められたページなどとして提供されてから変更されていないため、他のプロセスにメモリページを提供するために解放する必要がある場合は、破棄することができます.再び必要になった場合、またはダーティな場合はリロード/再入力します。つまり、解放する必要がある場合は、必要に応じて変更された内容を回復できるように、スワップ領域に書き出す必要があります。

プロセスで大量のプライベート ダーティ データが見られることは、必ずしも珍しいことではありません。問題は、システム内のすべてのプロセスにわたるすべてのプライベート ダーティ データの合計が、物理メモリ全体のかなりの部分 (正確な数値はワークロードと許容できるパフォーマンスに大きく依存) になり、スワップイン/スワップアウトを開始する必要がある場合です。 ..

于 2013-07-11T15:02:43.700 に答える