2012-01-10 6 views
10

私はすでにHow to monitor the computer's cpu, memory, and disk usage in Java?のような解決策を探しました。しかし、バッファやキャッシュに費やされるメモリはどこにも言及されていませんか? Linux上で例えばJavaで空きメモリー(バッファーとキャッシュを含む)をモニターする方法は?

free -mの出力:sigar

 
      total  used  free  shared buffers  cached 
Mem:   2011  1835  175   0  309  847 
-/+ buffers/cache:  678  1333 
Swap:   1998   0  1998 

私はすでにテストした出力、175メガバイトとして空きメモリを報告します。

この問題の原因は、OSのメモリがほとんど残っていないことを検出する方法です。以前の出力free -mでは175 MBがかなり低いようです。バッファとキャッシュを追加することで、空きメモリは実際には2 GBのうち1333 MBであることが明らかです。

要約すると、Javaを使用すると、空きメモリの値として1333 MBの値を取得できますか?私がすでに述べたように、これまでのところ私は175 MBの価値を得る方法しか知りません。私は直接空きメモリを知りませんが、JVMは、この情報などを持って、私は信じて、JMX豆を維持

+2

答えはOS固有のものである可能性が高いため、サポートする必要のあるOSを指定することができます。ちょうどLinux? – NPE

+1

ターゲットはlinuxですが、クロスプラットフォームのソリューションであれば好きです。私は手元にチェックするためにマシンを持っていないので、私はWindowsはキャッシュされた/バッファリングされたメモリを別々に報告するかもわかりません。 Windowsのエキスパートが歓迎します:D – bbaja42

+0

私は[ここ](http://www.codinghorror.com/blog/2006/09/why-does-vista-use-all-my-memory.html)に集まったものから、 Windowsタスクマネージャを表示する画像、Windowsはまた、合計メモリ、空きメモリとキャッシュメモリの分離を持っています。 – bbaja42

答えて

1

あなたはOS自体のメモリ統計情報を取得しようとしている場合は(ありませんJVM)では、JNAまたはJNIを使用して、プラットフォーム固有のネイティブAPI呼び出しをOSに直接行うことができます。

1
+0

[ここ](http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html#summary)に示されているように、JMXは次の情報を提供できます:JVMが取るメモリのサイズ、合計OSのメモリ、空きメモリ(バッファとキャッシュなし)。すべての良い。しかし、まだバッファとキャッシュに費やされたメモリの言及はありません。キャッシュされたメモリは、必要に応じてすぐに再利用することができます。 – bbaja42

+0

特定のクラス、パッケージなどに費やされるメモリの細かい詳細を取得しようとしている場合は、JMXモニタだけでなく、実際にProfilerが必要になると思います。興味のあるクラスがJMXにこのようなものを提供する独自のMBeanを持っていない限り。 –

+0

私たちは少し迷っているようです。私は特定のメモリをJavaクラスまたはパッケージに費やす必要はありません。非Javaの方法では、システムコマンド( 'free')を使用して、OS全体の空きメモリを測定することができます。このような測定では、バッファ/キャッシュの有無にかかわらず空きメモリが表示されます。私はjavaでそれを行う方法が不思議です。 – bbaja42

1

Java APIを使用してcahce/buffers番号を取得することはできません。 SIGARからの人でも、JNIラッパーとネイティブシステムコールを使用します。

関連する問題