2

Is there a way to see the memory usage of NIO buffers? There is the non-heap memory section in JConsole, but I do not think this includes the NIO buffers?

Operating system is Linux (Ubuntu or CentOS) if that would matter.

regards,

Wim

4

3 に答える 3

4

ダイレクト メモリ バッファは、使用するのと同じ量の物理メモリしか使用しないことに注意してください (次のページ サイズ、通常は 4K まで)。それらは作成時に仮想メモリを使用しますが、OS は、ダイレクト メモリ バッファ内のページを使用するまで物理メモリ (常駐) のページを割り当てないほどスマートです。これは、使用される物理メモリのサイズが、割り当てた (仮想) メモリの量よりも小さくなる可能性があることを意味します。物理/常駐メモリは、気にする必要があるものです。

これの利点は、数 KB しか使用しないと予想している場合でも、数 MB のバッファーを割り当てることができ、使用した量だけを使用し、何らかの理由でさらに必要な場合でも、プログラムが爆発しないことです。つまり、適切なサイズを取得する必要はなく、割り当てられたサイズをかなり安全に過大評価することができます。

于 2010-04-24T20:41:05.587 に答える
1

はい、psコマンド経由で Linux から。例:

ps x -o command,rss | grep java | grep latest | cut -b 17-

出力は KB 単位で表示されます。

Java、RSS、および NIO バッファーに関して私がしばらく前に受けた質問に興味があるかもしれません:ヒープなどのサイズが安定していても、Sun JVM がこれまで以上に多くの RSS メモリを消費し続けるのはなぜですか?

于 2010-04-24T07:02:01.060 に答える
0

これを使用して、仮想メモリと RSS メモリ、およびネイティブ スレッドの量を監視しました。

for((i=0;;++i)) { echo $i ` grep VmSize /proc/\21009/status | grep -o '[0-9]*'` ` grep VmRSS /proc/\21009/status | grep -o '[0-9]*'` ` grep Threads /proc/\21009/status | grep -o '[0-9]*'` ; sleep 1 || break; } > data

スペースで区切られたファイルを作成し、お気に入りのスプレッドシート ツールに簡単にインポートできます。

もちろん、21009 を、監視する Java プロセスのプロセス ID に置き換える必要があります。

この小さなスクリプトは、JVM によって使用されるすべてのメモリではなく、NIO が割り当てたものだけを確認できるようにしたかったため、私自身の質問に完全には答えていません。私が調査していたプログラムでメモリリークが発生しました。

于 2010-04-24T20:27:30.930 に答える