【发布时间】:2018-04-27 07:35:14
【问题描述】:
在一个运行 3 个 Tomcat webapps 的生产系统中,我们最近注意到 Tomcat 由于线程泄漏而崩溃。三个 webap 中的两个相互交互,我想找出这两个组件中的哪一个导致了这个线程的建立。
问题:有什么好的方法/工具可以找出 3 个 web 应用中的哪个有线程泄漏?
我的java技能很生疏。我对Tomcat不是很熟悉,并且随着我的发展而发现。
我启动了jconsole 来了解线程泄漏。我不愿意安装额外的(或非默认的)工具来解决这个问题,因为这是一个生产系统。
在下面的 jconsole 屏幕截图中,您可以看到线程数在增长; Tomcat/catalina 进程在 08:52 停止,几分钟后线程数达到 893 个线程。
根据请求,
Connector元素:<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" maxThreads = "600" minSpareThreads = "150" acceptCount = "150" connectionTimeout = "30000" />通过“Tomcat 崩溃”,我的意思是没有更多的事件记录到
catalina.log文件中,也没有记录到 3 个 web 应用程序的日志文件中。只有底层 apache 正在记录事件,带有 HTTP 500 错误。
【问题讨论】:
-
这是单个 Tomcat 实例吗? Tomcat“崩溃”是什么意思?
-
请编辑您的问题以包含来自 Tomcat 的
conf/server.xml文件的活动<Connector>元素。 请记得清理任何机密信息,例如密码。 -
@ChristopherSchultz:完成。不过,不确定我插入的
connector信息是否是您要查找的信息 -
那么 Tomcat 进程是否还在运行? Tomcat 变得完全惰性是很不寻常的。如果进程正在运行,请进行线程转储并查看所有线程在做什么。您在该连接器上的线程限制为 600,因此必须有其他东西创建这些额外的线程。日志文件中是否有任何内容可以解释发生了什么?
-
jstack 没有给出任何提示的线索(它应该显示很多线程在一段时间后处于空闲状态......)
标签: multithreading tomcat jconsole