2014-09-30 330 views
4

我首先說我對Java VisualVM沒有經驗。但是,它包含一些開發人員希望看到的信息。當我爲我的應用程序打開它時,它包含CPU,內存,類和線程的圖形。我想知道是否有辦法從命令行抓取這些信息。因此,如果應用程序在調用時使用了250 MB的內存,是否有可以寫入的命令返回250 MB?同樣它正在使用的線程數量是多少?從命令行獲取Java VisualVM數據

我使用的版本是1.7.0_51。

謝謝。

+0

VisualVM只是一個客戶端應用程序,它通過JMX使用JVM公開的信息。您可以輕鬆開發一個靜默應用程序來查詢這些JMX bean並檢索您需要的信息,然後通過命令行調用它。這對你會好嗎? – Victor 2014-09-30 22:02:54

+0

聽起來像它應該工作。但是,我不知道如何去做:/ – user2869231 2014-09-30 22:04:56

回答

0

VisualVM只是一個客戶端應用程序,它通過JMX使用JVM公開的信息。如果你想開發一個快速的客戶端應用程序,然後通過命令行調用它,是很容易的:

:使用URL

開到JVM的連接(請注意,它需要有JMX端口打開)

final JMXServiceURL jmxUrl = new JMXServiceURL(jmxServiceUrl); 
final JMXConnector jmxConnector = JMXConnectorFactory.connect(jmxUrl); 
final MBeanServerConnection mbsc = jmxConnector.getMBeanServerConnection(); 

然後,使用MBeanServerConnection對象對JVM公開的JMX Bean執行查詢。關於內存的示例:

ObjectName jvmMemory = new ObjectName("java.lang", "type", "Memory");   
CompositeData heapUsage = (CompositeData) mbsc.getAttribute(jvmMemory, "HeapMemoryUsage"); 
printer.print(String.valueOf(heapUsage.get("used"))); 
printer.print(String.valueOf(heapUsage.get("committed"))); 
printer.print(String.valueOf(heapUsage.get("max"))); 

您有一系列需要查詢的Mbeans。使用JVisualVM查看這些MBean是什麼。

更新

有關信息如何打開JMX端口,請參閱this answer