Tag: 转储

除了jmap之外还有一个命令行方法来获取jvm堆转储吗?

我们在linux中使用oracle jvm 1.8 64bit。 我们知道jmap可以获得jvm堆转储: jmap -F -dump:format=b,file=***filepath*** ***pid*** 但它很慢。 我们知道使用JVisualVM和连接到JMX的JConsole也可以获得堆转储,而且速度非常快。 但它们与GUI有关。 但是,在我们的产品环境中,没有GUI。 没有带GUI的机器可以访问该环境。 所以我们的问题是 – JVisualVM和JConsole是否支持命令行来进行堆转储? 或者除了jmap之外还有一个命令行方法来获取jvm堆转储吗? 我们今天试过 – 1,使用jvisualvm(远程jmx),我们可以成功获得堆转储 2,使用不带-F选项的jmap,转储失败: [root @panda01~] #jmap -dump:format = b,file = / tmp / heapdump.31941.hprof 31941 31941:无法打开套接字文件:目标进程未响应或未加载HotSpot VM 当目标进程没有响应时,可以使用-F选项 3,使用带有-F选项的jmap,转储成功,但速度慢: [root @panda01~] #jmap -F -dump:format = b,file = / tmp / heapdump.31941.hprof 31941 正在处理ID 31941,请等待…… 调试器连接成功。 服务器编译检测到 […]

在OutOfMemory时生成java转储

我有一个程序,最终应该生成OutOfMemory 。 程序代码是: public class VeryLargeObject implements Serializable { public static final int SIZE = 1 << 12; public String tag; public int[][] bigOne = new int[SIZE][SIZE]; { // Initialize bigOne for(int i = 0; i < SIZE ; ++i) { for(int j = 0; j < SIZE; ++j) { bigOne[i][j] = (int) (Math.random() * […]

在JVM上禁用本地JMX连接

我们正在编写一个java程序,它将密码保存在内存中。 不幸的是,用户可以轻松地使用jconsole或jmap创建堆转储文件并打开它以查找密码。 我认为jconsole使用本地套接字连接jvm。 我想知道,有没有办法甚至为本地用户禁用jmx? 有没有办法完全禁用堆转储? 由于用户可以访问内存段,因此无论如何都可以访问密码。 但是,我想禁用标准的方法来使行动尽可能昂贵。

如何从正在运行的JBoss实例生成和分析线程转储?

如何从正在运行的JBoss实例生成和分析线程转储?

生成Java线程转储而不重新启动。

我想创建一个跟踪内存使用和CPU使用情况的线程。 如果应用程序达到高级别,我想生成堆转储或线程转储。 有没有办法生成线程转储运行时而不重新启动?