东莞网站设计讯息,企业信息查询系统入口,网站接广告平台,有哪些做的比较好的网站问题我有一个Java应用程序#xff0c;我从控制台运行#xff0c;然后控制台执行另一个Java进程。我想获得该子进程的线程/堆转储。在Unix上#xff0c;我可以做akill -3 但是在Windows AFAIK上获取线程转储的唯一方法是在控制台中使用Ctrl-Break。但这只会让我转移父进程我从控制台运行然后控制台执行另一个Java进程。我想获得该子进程的线程/堆转储。在Unix上我可以做akill -3 但是在Windows AFAIK上获取线程转储的唯一方法是在控制台中使用Ctrl-Break。但这只会让我转移父进程而不是孩子。是否有另一种方法来获得堆转储#1 热门回答(326 赞)假设你知道pid你可以使用jmap获取正在运行的任何进程的转储。使用任务管理器或资源监视器获取pid。然后jmap -dump:formatb,filecheap.bin 获取该进程的堆。#2 热门回答(98 赞)你混淆了两个不同的java转储.kill -3生成一个线程转储而不是一个堆转储。线程转储将JVM输出中的每个线程的堆栈跟踪作为文本输出到stdout。堆转储 JVM进程输出到二进制文件的内存内容。要在Windows上进行线程转储CTRL BREAK如果你的JVM是前台进程是最简单的方法。如果你在像Cygwin或MobaXterm这样的Windows上有类似unix的shell你可以像在Unix中一样使用2146767290。要在Unix中进行线程转储只要为JVM获得正确的PIDCTRL Cif你的JVM就是前台进程orkill -3 {pid}会工作。只是为了完成转储问题堆转储不常用因为它们很难解释。但是如果你知道在哪里/如何看待它们它们中有很多有用的信息。最常见的用法是查找内存泄漏。最好在java命令行中设置-D以便在OutOfMemoryError上自动生成堆转储但也可以手动触发堆转储。最常见的方法是使用java utilityjmap。**注意**此实用程序并非在所有平台上都可用。从JDK 1.6,jmap开始在Windows上可用。一个示例命令行看起来像jmap -dump:filemyheap.bin {pid of the JVM}输出myheap.bin不是人类可读的(对于我们大多数人来说)你需要一个工具来分析它。我的偏好是MAT.http://www.eclipse.org/mat/#3 热门回答(24 赞)我认为在Linux进程中创建.hprof文件的最佳方法是使用jmap命令。例如jmap -dump:formatb,filefilename.hprof {PID}