【问题标题】:Thousands of parked thread数千个停放线程
【发布时间】:2022-11-17 03:58:29
【问题描述】:

我注意到我的应用程序有数千个这样的线程,只是想知道这些线程的来源是什么以及如何摆脱它们?到目前为止,这些似乎没有造成任何问题,但像这样看到它们看起来不太好。任何有用的信息表示赞赏。这是一个在tomcat中运行的java应用程序。

"org.apache.openejb.pool.scheduler.124" daemon prio=5 tid=2599 TIMED_WAITING
    at sun.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
       Local Variable: java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject#1320
       Local Variable: java.util.concurrent.locks.AbstractQueuedSynchronizer$Node#3514
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
       Local Variable: java.util.concurrent.locks.ReentrantLock#5616
       Local Variable: java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue#458
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
       Local Variable: java.util.concurrent.ScheduledThreadPoolExecutor#458
       Local Variable: java.util.concurrent.ThreadPoolExecutor$Worker#457
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

【问题讨论】:

    标签: tomcat apache-tomee


    【解决方案1】:

    它完全取决于您的代码库。如果您的应用程序创建或使用一堆 @Schedule 注释或一堆对 TimerService 的调用,这是预料之中的,并且这些基本上是无害的;他们使用了一点点内存,但这可能不值得为此失眠。

    如果您的应用不以任何形式使用计时器,那将非常有趣。我会发布一个可重现的示例以及您正在使用的 Java 和 TomEE 版本。

    【讨论】:

      猜你喜欢
      • 2010-11-23
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多