我们有一个应用程序,它会泄漏一些内存,这是一种轻描淡写。
我正在jvisualvm尝试查找导致问题的原因。
jvisualvm
我看到在以以下名称开头的线程上,线程数有很多增长: http-8080-示例:http:8080-42
我的第一个猜测是,每个线程都是来自客户端的请求命中,因为每个客户端请求都是在其自己的线程中处理的。
我的问题是这些线程已经运行了很长一段时间(因此已经有10分钟了)。
我的问题是这样的:
我的假设正确吗? 如果是这样,为什么线程运行了这么长时间?当然,它仍然不能忙于满足客户的请求吗?
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指出线程正在等待或在资源等上锁定的状态是什么?