java – 如何编写可分析的线程转储格式

我正在创建一个全局异常处理,在某些情况下关闭之前会收集一些信息.其中一个信息是当前的线程转储.我用以下代码执行此操作:

ManagementFactory.getThreadMXBean().dumpAllThreads(true, true);

问题是将信息写入TDA的可分析格式.是否有一种“简单”的方式来格式化信息而不是自己编写格式?

编辑:我想有一个完整的线程转储,所以我可以找到有问题的线程.上面提到的方法提供了一个ThreadInfo-Objects数组,所以我有数据.我的问题是写入的输出不是TDA识别为线程转储的格式.

解决方法:

如果您不想复制TDA代码(毕竟它是LGPL),您还可以使用Attach API以标准格式获取数据.据我所知,执行转储的唯一JVM内置代码是Attach代理中的本机代码.

String selfName = ManagementFactory.getRuntimeMXBean().getName();
final int selfPid = Integer.valueOf(selfName.substring(0, selfName.indexOf('@')));                

HotSpotVirtualMachine vm = (HotSpotVirtualMachine) VirtualMachine.attach(Integer.toString(selfPid));

InputStream sDump = vm.remoteDataDump(new Object[]{"-l"}); // lowercase L for lock dump

数据转储将在字符数据流中返回转储.

上一篇:分析MySQL数据库查询的执行时间?


下一篇:Servlet CDI example analysis