2009-05-13 8 views
2

私は私の質問は、あるそれは(簡単にリモートVMからMemoryMXBeanではクラスのインスタンスを取得することが可能であると私はどのようにしていることだろうリモートJVMを使用してMemoryMXBeanインスタンスを取得することはできませんか?

http://recursor.blogspot.com/2006/10/memory-notifications-in-java.html

あなたのVMのためのあなたの現在のメモリを照会する方法について説明し、この素晴らしい記事を見つけました)、または手動でMBeanに問い合わせる必要がありますか?

答えて

1

リモートからJMX Beanに問い合わせることができます。 JMXチュートリアルのJMX Connectorsセクションを参照してください。

直接的なアプローチは、JConsoleを使用してクエリ(この場合はMemoryMXBean)を決定し、それをコードすることがあります。

1

this pageに説明するようにMBeanServerConnectionで、remotlyそれにアクセスすることができます

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") 
にしたいプロパティを照会

彼らは別の質問で言ったように、かなりひどい( '文字列型のインターフェース')。

Brian Agnew氏によると、JConsoleビューは、必要な情報が保存されている場所を見つけるのに非常に便利です。

+0

ありがとうございました。 JMX上でプロキシMemoryMXBeanインターフェイスを使用しているときにキャスト例外を解決しました。これは答えとして投票する必要があります。 MemoryUsageへのマッピングを使って答えを広げることができます:MemoryUsage memoryUsage = MemoryUsage.from(mem); –

関連する問題