为什么我有很多tomcat线程处于timed_waiting状态

问题描述 投票:0回答:1

在我的 Spring Boot 应用程序中,我以不同的时间间隔获取线程转储,并且所有线程中的线程都保持在 timed_Waiting 状态,它们到底在哪里被阻塞?如果他们处于定时等待状态,他们不应该在某个时候摆脱这种状态吗?

我们已将 server.tomcat.threads.max 设置为 500,没有对线程进行其他配置。同时堆没有明显变化。然而,当可运行线程增加时,timed_Waiting 线程会突然下降,并且通常会恢复到比以前更高的水平(线程状态,红色表示定时等待)。 this 是线程转储分析。 Spring启动版本 - spring.boot.starter-web:2.7.5

在分析转储时,可以发现其中大部分是tomcat nio线程,挑选其中一些并以不同的时间间隔跟踪它们进行转储,所有这些线程都保持在timed_Waiting状态。

spring-boot tomcat threadpool
1个回答
0
投票

我面临同样的问题 - Windows 上的 JDK 17.0.12 和 Tomcat 10.1.30。

所有处于 timed_wait 模式的线程都有下面的堆栈跟踪,并且 timed_wait 线程的数量不断增长,直到 Tomcat 开始断开连接。

jdk.internal.misc.Unsafe.park(Native Method); 
java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252);

java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1674);

java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:460); 
app//org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:99); 
app//org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:33); 

app//org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1113);

app//org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1175);

app//org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659);

app//org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63); java.lang.Thread.run(Thread.java:840);

感谢任何帮助。

© www.soinside.com 2019 - 2024. All rights reserved.