Tag: 线程转储

Java线程转储摘要工具

我有时不得不从Tomcat服务器查看线程转储。 但是,这是一个非常缓慢的过程,因为我的应用程序使用具有几百个线程的线程池。 我看到的大多数线程转储包括许multithreading的相同堆栈跟踪,因为它们在空闲等待工作。 是否有任何工具可以解析线程转储,只显示唯一的堆栈跟踪以及每个状态中线程数的计数? 这将允许我快速忽略在公共位置等待工作的数十或数百个线程。 我已经尝试过Thread Dump Analyzer,但这并没有对常见的堆栈跟踪进行任何总结。

线程转储被阻止并锁定

这类似于Java线程转储:没有“等待锁定…”的BLOCKED线程 。 基本上,我看到一个BLOCKED线程,但它有等待的锁: “pool-1-thread-60” prio=10 tid=0x00007fbf10017000 nid=0x210 waiting for monitor entry [0x00007fbed64e3000] java.lang.Thread.State: BLOCKED (on object monitor) at org.apache.log4j.Category.callAppenders(Category.java:204) – locked (a org.apache.log4j.Logger) at org.apache.log4j.Category.forcedLog(Category.java:391) at org.apache.log4j.Category.info(Category.java:666) … 我希望看到- waiting to lock …而不是- locked… 另一个问题表明垃圾收集是原因,但如果是这样,那么所有线程都不会被阻塞吗? 还有其他线程是RUNNABLE。 另外,我怎么能certificate这种情况呢? 为什么这是观察到的行为? 我不想盲目地假设它是垃圾收集器只是为了发现几天之后它是别的东西。 ==辅助信息== 虽然我认为它与手头的问题无关,但这是上述转储来自的代码部分。 for(Category c = this; c != null; c=c.parent) { // Protected against simultaneous call […]