4
我首先說我對Java VisualVM沒有經驗。但是,它包含一些開發人員希望看到的信息。當我爲我的應用程序打開它時,它包含CPU,內存,類和線程的圖形。我想知道是否有辦法從命令行抓取這些信息。因此,如果應用程序在調用時使用了250 MB的內存,是否有可以寫入的命令返回250 MB?同樣它正在使用的線程數量是多少?從命令行獲取Java VisualVM數據
我使用的版本是1.7.0_51。
謝謝。
我首先說我對Java VisualVM沒有經驗。但是,它包含一些開發人員希望看到的信息。當我爲我的應用程序打開它時,它包含CPU,內存,類和線程的圖形。我想知道是否有辦法從命令行抓取這些信息。因此,如果應用程序在調用時使用了250 MB的內存,是否有可以寫入的命令返回250 MB?同樣它正在使用的線程數量是多少?從命令行獲取Java VisualVM數據
我使用的版本是1.7.0_51。
謝謝。
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。
VisualVM只是一個客戶端應用程序,它通過JMX使用JVM公開的信息。您可以輕鬆開發一個靜默應用程序來查詢這些JMX bean並檢索您需要的信息,然後通過命令行調用它。這對你會好嗎? – Victor 2014-09-30 22:02:54
聽起來像它應該工作。但是,我不知道如何去做:/ – user2869231 2014-09-30 22:04:56