2

VMの現在のメモリを照会する方法を説明するこの素晴らしい記事を見つけましたhttp://recursor.blogspot.com/2006/10/memory-notifications-in-java.html

私の質問は、リモートVMからMemoryMXBeanクラスのインスタンスを簡単に取得することは可能ですか(そしてそれをどのように行うのですか)、またはMBeanを手動でクエリする必要がありますか?

4

2 に答える 2

2

このページで説明されているように、以下を使用してリモートでアクセスできますMBeanServerConnection

   MBeanServerConnection mbs;

   // Connect to a running JVM (or itself) and get MBeanServerConnection
   // that has the JVM MXBeans registered in it
   ...

   try {
       // Assuming the RuntimeMXBean has been registered in mbs
       ObjectName oname = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME);

       // Get standard attribute "VmVendor"
       String vendor = (String) mbs.getAttribute(oname, "VmVendor");
   } catch (....) {
       // Catch the exceptions thrown by ObjectName constructor
       // and MBeanServer.getAttribute method
       ...
   }

ただし、私が理解している限り、Java インターフェイスを使用することはできません。必要なプロパティをクエリする必要があります。

CompositeDataSupport mem = (CompositeDataSupport)serv.getAttribute(memory, "NonHeapMemoryUsage") ;

mem.get("committed")

これは非常にひどいものです(別の質問で述べたように、「stringly-typed」インターフェース)。

Brian Agnew が言ったように、JConsole ビューは、必要な情報がどこに保存されているかを見つけるのに非常に役立ちます。

于 2010-07-01T16:27:02.840 に答える
1

JMX Bean をリモートで照会できます。JMX チュートリアルのJMX コネクタのセクションを参照してください。

単純なアプローチは、JConsoleを使用してクエリの対象 (この場合は MemoryMXBean) を決定し、それをコード化することです。

于 2009-05-13T10:41:24.187 に答える