gpt4 book ai didi

java - 运行的线程过多

转载 作者:行者123 更新时间:2023-11-30 07:06:36 25 4
gpt4 key购买 nike

在我们的 AppServer 中,我们看到线程数超过了它的 JMX 线程数阈值(最大值 = 500,实际值 = 595)。

我看到没有死锁。我进行了线程转储,发现在 595 个线程中,大多数都属于 2 类:

1) Timed Waiting 中的 234 个线程(Thread Dump 如下所示)

"Timer-232" daemon prio=10 tid=0x00007f46c85cd000 nid=0x7b06 in Object.wait() [0x00007f4668001000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x000000075246c498> (a java.util.TaskQueue)
at java.util.TimerThread.mainLoop(Timer.java:509)
- locked <0x000000075246c498> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:462)

2) 233 个线程处于等待状态(如下所示的线程转储)。我想这是在队列中被阻塞的罪魁祸首,特别是延迟队列。

"AsyncHttpClient-Reaper" daemon prio=10 tid=0x00007f469cd4c000 nid=0x7b09 waiting on condition [0x00007f4667cfe000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000007524a2908> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
at java.util.concurrent.DelayQueue.take(DelayQueue.java:160)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:609)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:602)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:662)

你能帮我理解是什么导致线程超过 JMX 阈值吗?这是我第一次使用线程场景,因此无法进行可靠的分析。提前致谢。

最佳答案

看起来您正在用太多的异步请求扰乱您的系统。限制它们或为这些请求设置最大池数

关于java - 运行的线程过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25570583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com