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. 如何仅从命令行中从jmx接口提取jmx统计信息?
- 2. 使用JVisualVM从Java远程应用程序获取堆转储
- 3. 通过命令提示符从Tomcat JMX获取服务状态
- 4. 使用python从命令提示符命令获取值
- 5. 以编程方式获取堆信息使用jmx与java 5
- 6. 命令行JMX客户端设置值
- 7. 如何从命令行获取NSUserDefaults
- 8. 从命令行获取阵列输入
- 9. 从命令行获取Java VisualVM数据
- 10. 从FileUtils获取执行的命令?
- 11. 从命令行获取输入?
- 12. 从命令行获取TCL的版本?
- 13. 从命令行获取保管箱url
- 14. 从前端获取命令行参数
- 15. Grails geb从命令行获取参数
- 16. C++通过命令行从用户缀表达式的转换使用堆
- 17. 从命令行读取并使用sscanf转换为整数
- 18. 从命令行获取运行JVM的最大堆大小:否JDK工具
- 19. 如何在从命令行编译时获取堆栈跟踪中的行号
- 20. 如何使用getContents从命令行获取输入?
- 21. 获取ssh-agent使用从Windows命令shell运行的git
- 22. Salesforce:使用命令行中的Data Loader从ParentId获取名称
- 23. 如何使角应用程序从命令行获取参数?
- 24. 获取命令行参数
- 25. 从Ajax命令获取WebMethod
- 26. 从命令行使用sendmail
- 27. 堆栈转储使用alloc
- 28. adb命令获取内部存储
- 29. 从堆转储中提取线程转储
- 30. 从Java进程获取堆转储以调试内存泄漏
'了java.lang.RuntimeException:无法找到Atach API。请将tools.jar添加到类路径中。有任何想法吗 ? – Nati
如果您使用的JRE(而不是JDK)没有** tools.jar **,通常会发生这种情况。该jar可以在** $ JDK_HOME **/lib中找到。 – Nicholas
那么我该如何解决它?我显然在目标服务器上没有JDK。我试图在java旁边复制tools.jar,但仍然没有成功。 – Nati