使用-F开关时jstack输出不同

时间:2015-11-12 16:44:41

标签: java jstack

我看到jstack -l <pid>jstack -F <pid>的输出完全不同(尽管基本相同)。我的理解是-F当你使用jdwp协议获取堆栈转储信息时(从jstack输出的开头经验地注明)。

常规jstack的输出:

"Worker-265" #15722 prio=5 os_prio=0 tid=0x00007f12547d2000 nid=0x3890 in Object.wait() [0x00007f12e7bfc000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188)
        - locked <0x00000000816c2b90> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:52)

jstack -F

的输出
Thread 29628: (state = BLOCKED)
 - java.lang.Object.wait(long) @bci=0 (Compiled frame; information may be imprecise)
 - org.eclipse.core.internal.jobs.WorkerPool.sleep(long) @bci=52, line=188 (Compiled frame)
 - org.eclipse.core.internal.jobs.WorkerPool.startJob(org.eclipse.core.internal.jobs.Worker) @bci=78, line=220 (Compiled frame)
 - org.eclipse.core.internal.jobs.Worker.run() @bci=318, line=52 (Compiled frame)

这会导致线程堆栈转储解析实用程序(例如http://spotify.github.io/threaddump-analyzer/)的问题,这些实用程序期望以标准格式输出。有没有办法(交换机或实用程序)将输出从jstack -F转换为常规jstack输出?我懒得写严格的正则表达式来改变输出,并且正在检查是否有人已经完成了这项工作。提前谢谢!

0 个答案:

没有答案