【问题标题】:JConsole Threads Tab - Understand InfoJConsole 线程选项卡 - 了解信息
【发布时间】:2010-12-08 17:12:05
【问题描述】:

我正在运行 JBoss 5。我看到随着时间的推移内存保持在增加。 活动线程的数量正在增加。以下堆栈跟踪取自一个活动线程,该线程是许多线程之一(这些是随着时间的推移而添加的线程)。 我可以从堆栈跟踪中学到什么?我怎样才能更深入地了解正在发生的事情?

名称:WorkManager(2)-92 状态:在 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4e2e52 上等待 阻止总数:1 等待总数:1

堆栈跟踪: sun.misc.Unsafe.park(本机方法) java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925) java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358) java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) java.lang.Thread.run(Thread.java:619)

谢谢, 棒

【问题讨论】:

    标签: jboss jconsole


    【解决方案1】:

    该线程看起来正在等待 getTask(),即它只是在等待一些工作要做。

    新线程会随着请求的到来而产生,除非有大量线程忙于实际工作,否则您不必担心。

    内存使用量会随着时间的推移而增长,直到 JVM 决定对其中的一部分进行垃圾回收。如果它不断增长,并且从 jconsole 运行 GC 没有任何区别,则可能存在内存泄漏。查找泄漏可能很困难,但您可以使用MAT 使其更容易。

    【讨论】:

      【解决方案2】:

      您将通过从 JDK1.6 或 JDK1.7 运行 JConsole 从中了解更多信息。 JDK1.5 中的 JConsole.exe 是“老派”。

      【讨论】:

        【解决方案3】:

        我建议您从使用jvisualvm 进行分析开始。您将获得随时间推移的堆使用情况、线程、垃圾收集等图表。

        您也可以使用jmap 进行堆转储,然后使用jhatmat 进行分析。

        【讨论】:

          猜你喜欢
          • 2012-04-16
          • 2023-03-28
          • 2012-09-30
          • 1970-01-01
          • 2018-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多