VMの現在のメモリを照会する方法を説明するこの素晴らしい記事を見つけましたhttp://recursor.blogspot.com/2006/10/memory-notifications-in-java.html
私の質問は、リモートVMからMemoryMXBeanクラスのインスタンスを簡単に取得することは可能ですか(そしてそれをどのように行うのですか)、またはMBeanを手動でクエリする必要がありますか?
VMの現在のメモリを照会する方法を説明するこの素晴らしい記事を見つけましたhttp://recursor.blogspot.com/2006/10/memory-notifications-in-java.html
私の質問は、リモートVMからMemoryMXBeanクラスのインスタンスを簡単に取得することは可能ですか(そしてそれをどのように行うのですか)、またはMBeanを手動でクエリする必要がありますか?
このページで説明されているように、以下を使用してリモートでアクセスできます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 ビューは、必要な情報がどこに保存されているかを見つけるのに非常に役立ちます。