0
A
回答
0
這會不會是漂亮,但它的工作原理。話雖如此,你可能想要考慮在Groovy或Jython中編寫腳本,甚至是JavaScript ...... 我爲jmxlocal添加了一個quickie插件,這是一個爲本地JVM實現標準JMX遠程處理的項目。它現在支持命令行鍼對連接的MBeanServer調用一個命令,並且該命令必須在Java代碼中指定。
克隆回購和建立與mvn乾淨安裝。 將jar(jmxlocal-1.0-SNAPSHOT.jar)複製到目標服務器。如下 執行使用目標java進程的PID轉儲JMX命令:
java -jar target/jmxlocal-1.0-SNAPSHOT.jar -j service:jmx:attach:///<PID> -c "conn.invoke(on(\"com.sun.management:type=HotSpotDiagnostic\"), \"dumpHeap\", new Object[]{\"/tmp/heap.dump\", true}, new String[]{String.class.getName(), boolean.class.getName()})"
輸出將是
Command Executed. Result [null]
,你應該在/tmp/heap.dump找到你的轉儲文件。
如果需要,你可以提供使用-u [用戶名]和-p [密碼]參數憑據。
1
它可以用這個簡單的代碼來完成:
@SuppressWarnings("restriction")
public class CreateHeapDump
{
public static void main(String[] args) throws Exception
{
String host = args[0];
String port = args[1];
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + host + ":" + port + "/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
ObjectName mbeanName = new ObjectName("com.sun.management:type=HotSpotDiagnostic");
HotSpotDiagnosticMXBean bean = JMX.newMBeanProxy(mbsc, mbeanName, HotSpotDiagnosticMXBean.class, true);
String fileName = "heap_dump_" + new SimpleDateFormat("dd.MM.yyyy HH.mm").format(new Date()) + ".hprof";
boolean onlyLiveObjects = true;
bean.dumpHeap(fileName, onlyLiveObjects);
}
}
調用它的命令行:
java CreateHeapDump localhost 9010
相關問題
- 1. 如何通過命令行讀取Java堆轉儲(無GUI)
- 2. 如何僅從命令行中從jmx接口提取jmx統計信息?
- 3. 使用JVisualVM從Java遠程應用程序獲取堆轉儲
- 4. 通過命令提示符從Tomcat JMX獲取服務狀態
- 5. 從調用進程獲取命令行
- 6. 如何從運行tomcat獲取堆轉儲7
- 7. 使用argv獲取命令行?
- 8. 分割錯誤(核心轉儲) - 從命令行讀取文件
- 9. 以編程方式獲取堆信息使用jmx與java 5
- 10. 如何使用AppDynamics捕獲堆轉儲?
- 11. 使用python從命令提示符命令獲取值
- 12. 命令行JMX客戶端設置值
- 13. C++通過命令行從用戶綴表達式的轉換使用堆
- 14. 從前端獲取命令行參數
- 15. 從命令行參數獲取散列
- 16. 從FileUtils獲取執行的命令?
- 17. 從命令行獲取mysql列
- 18. 從命令行獲取TCL的版本?
- 19. 從命令行獲取保管箱url
- 20. 從命令行獲取Java VisualVM數據
- 21. 從命令行獲取NuGet.exe版本
- 22. PYTHON從命令行獲取文件
- 23. Grails geb從命令行獲取參數
- 24. 從命令行獲取插入的sqlite
- 25. Python,從運行命令獲取狀態
- 26. 如何從命令行獲取NSUserDefaults
- 27. 從命令行獲取輸入?
- 28. 從命令行獲取陣列輸入
- 29. 如何從Windows命令行獲取cURL?
- 30. 從命令行獲取參數
'了java.lang.RuntimeException:無法找到Atach API。請將tools.jar添加到類路徑中。有任何想法嗎 ? – Nati
如果您使用的JRE(而不是JDK)沒有** tools.jar **,通常會發生這種情況。該jar可以在** $ JDK_HOME **/lib中找到。 – Nicholas
那麼我該如何解決它?我顯然在目標服務器上沒有JDK。我試圖在java旁邊複製tools.jar,但仍然沒有成功。 – Nati