草庐IT

java - 如何以编程方式转储 JMX 数据?

我希望能够记录所有可通过jconsole访问的JMX数据。有没有办法以编程方式执行此操作?我正在构建一种系统日志记录形式,我想使用类似于jconsole的工具创建可查看的间隔数据。我该怎么做? 最佳答案 java.lang.management.ManagementFactory使您可以访问JMX数据。例如ListmemPoolBeans=ManagementFactory.getMemoryPoolMXBeans();for(MemoryPoolMXBeanmpb:memPoolBeans){System.out.println(

java - 如何从运行 tomcat 7 获取堆转储的方法

我试过这个GetaheapdumponJVMfromTomcat6但这对我不起作用,还有其他方法可以从tomcat服务器获取堆转储吗?提前致谢! 最佳答案 获取堆转储的最简单方法是使用jmap.在有java进程的机器上执行jmap命令。使用示例:jmap-dump:file=/mnt/heapdump_2013-04-01.data 29842使用jps了解javaPid。你也可以通过jvisualvm进行堆转储.您可以通过jmx连接到远程机器或jstatd.您可以进行堆转储并存储在远程计算机上。要分析heapdumps可以建议你:

java - 从堆转储中的错误名称中查找 Java lambda

我正在寻找内存泄漏,堆转储显示许多lambda实例正在保存有问题的对象。lambda的名称是周围的类名,带有$$lambda$107在末尾。我还可以看到它有一个字段(这是它的正确名称),名为arg$1它引用填充堆的对象。不幸的是,我在这个类中有很多lambda,我想知道我能做些什么来缩小范围。我假设arg$1是一个隐式参数——lambda表达式中的一个自由变量,当lambda变成闭包时被捕获。那是对的吗?我也猜测107孤立地没有真正的帮助,但是我可以设置一些标志来记录哪个lambda表达式得到什么数字?还有其他有用的提示吗? 最佳答案

java - 在 Exception 上转储变量状态

我想知道是否有一种方法可以在出现异常时转储所有局部变量的状态,以便更好地了解导致异常的环境状态。下面的变量idsToDump在运行时是未知的,我想找出集合中的值导致NPE的状态。例子:publicstaticvoidmain(String[]args){HashMapemployees=newHashMap();employees.put(1,"James");Integer[]idsToDump=newInteger[]{1,2,3};for(IntegeremployeeId:idsToDump){Stringname=employees.get(employeeId).toLow

jvm - 是否可以指定 JVM 故障转储的位置?

我们有一个使用JNI的桌面应用程序偶尔会导致JVM崩溃。幸运的是,JVM会生成一个hs_err_pidXXXX.log文件,这对于调试此类错误非常有用。然而,它似乎总是转到当前工作目录,从那里挖掘它很烦人,因为我们的其他日志文件都转到特定的“日志文件位置”。是否可以为那些“故障转储”文件指定不同的位置?怎么办? 最佳答案 乔纳斯尽管HeapDumpPath适用于堆转储,但它不是您问题的答案。堆转储和jvm崩溃日志是两个独立的东西。要更改jvm崩溃日志的目标,请使用此选项运行java:-XX:ErrorFile=/path/to/fi

java - Java堆转储是否包括线程堆栈

我一直在使用Eclipse内存分析工具来检查堆转储。我还没有看到任何对象通过线程堆栈中的局部变量保持Activity状态的情况。Java线程堆栈是否保留在堆转储中?如果不是,这些对象是否在转储中被计为无法访问的对象?如果是这样,有什么方法可以保留线程堆栈,以便可以将未收集的垃圾与局部变量值区分开来? 最佳答案 是最近的JVM(截至2010年)的堆转储包括线程堆栈。EclipseMemoryAnalyzer0.8(2010年1月发布)包括对提取此信息的支持:http://www.eclipse.org/mat/0.8/notewort

java - 如何转储 HashMap 的内容?

如何转储JavaHashMap(或任何其他)的内容,例如转储到STDOUT?例如,假设我有一个具有以下结构的复杂HashMap:(student1=>Map(name=>Tim,Scores=>Map(math=>10,physics=>20,Computers=>30),place=>Miami,ranking=>Array(2,8,1,13),),student2=>Map(..............................),........................................................);所以我想把它打印到屏幕上,以便

java - 在进行堆转储后,如何在 OutOfMemoryError 上重启 JVM?

我知道-XX:+HeapDumpOnOutOfMemoryErrorJVM参数。我也知道-XX:OnOutOfMemoryError="cmdargs;cmdargs"那kill-3将请求堆转储。问题:我如何确保我在OutOfMemoryError上,首先进行完整的堆转储,然后然后在转储完成后强制重启(或终止)?是我最好的选择-XX:OnOutOfMemoryError="kill-3%p;sleep;kill-9%p"? 最佳答案 java-XX:+HeapDumpOnOutOfMemoryError-XX:OnOutOfMemo

java - 如何在 Windows 上使用 Java Hotspot JVM 禁用小型转储 (mdmp) 文件生成

目前我有一个已部署的可执行jar文件,当它崩溃时会创建大型(7+Gb)小型转储文件。我想要一个导致崩溃的文本表示,而不是JVM状态的二进制文件。我尝试使用在thisCodeRanchpost中找到的信息以及我找到的文档intheJavadocumentation似乎没有帮助。我还引用了thisquestion但没有确定的答案。有没有我不知道的典型方法? 最佳答案 我找到了一个命令行选项,似乎可以满足我的要求。使用启动jarjava-XX:-CreateMinidumpOnCrash-jarmyJar.jar似乎可以解决问题,并且会生

java - 强制或生成jvm核心转储(IBM JVM)

这个问题已经在这里有了答案:9年前关闭。PossibleDuplicate:CanIforcegenerationofaJVMcrashlogfile?如何在Java应用程序服务器上或一般情况下强制或生成JVM核心转储? 最佳答案 问题(摘要):要诊断与在WebSphereApplicationServerCommunityEdition上运行的客户应用程序挂起或性能不佳有关的问题,需要用户生成各种转储并将其发送给IBM支持人员进行诊断。该技术说明解释了当WebSphereApplicationServerCommunityEdit