一尘不染

Apache Tomcat请求线程

tomcat

我们有一个应用程序,它会泄漏一些内存,这是一种轻描淡写。

我正在jvisualvm尝试查找导致问题的原因。

我看到在以以下名称开头的线程上,线程数有很多增长: http-8080-示例:http:8080-42

我的第一个猜测是,每个线程都是来自客户端的请求命中,因为每个客户端请求都是在其自己的线程中处理的。

我的问题是这些线程已经运行了很长一段时间(因此已经有10分钟了)。

我的问题是这样的:

我的假设正确吗? 如果是这样,为什么线程运行了这么长时间?当然,它仍然不能忙于满足客户的请求吗?


阅读 252

收藏
2020-06-16

共1个答案

一尘不染

Tomcat总是有许多正在等待的HTTP线程,例如,如果我们查看默认的连接器设置:

<Connector port="80" maxHttpHeaderSize="8192"
              maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
              enableLookups="false" redirectPort="8443" acceptCount="100"
              connectionTimeout="20000" disableUploadTimeout="true" />

我们可以看到,应该总是至少有25个线程处于活动状态,但是正在等待连接(达到maxThreads限制)。这由min和maxSpareThreads属性控制。

JVisual VM指出线程正在等待或在资源等上锁定的状态是什么?

2020-06-16