Multithreading 如何找出哪个tomcat webapp存在线程泄漏?
在一个运行3个Tomcat webapps的生产系统中,我们最近注意到Tomcat由于线程泄漏而崩溃。三个webap中的两个相互作用,我想找出这两个组件中的哪一个导致了线程的累积 问题:找出3个Web应用程序中哪一个存在线程泄漏的好方法/工具是什么 我的java技能非常生疏。我对Tomcat不是很熟悉,随着时间的推移我会发现。 我启动了Multithreading 如何找出哪个tomcat webapp存在线程泄漏?,multithreading,tomcat,jconsole,Multithreading,Tomcat,Jconsole,在一个运行3个Tomcat webapps的生产系统中,我们最近注意到Tomcat由于线程泄漏而崩溃。三个webap中的两个相互作用,我想找出这两个组件中的哪一个导致了线程的累积 问题:找出3个Web应用程序中哪一个存在线程泄漏的好方法/工具是什么 我的java技能非常生疏。我对Tomcat不是很熟悉,随着时间的推移我会发现。 我启动了jconsole,以了解线程泄漏的情况。我不愿意安装其他(或非默认)工具来解决此问题,因为这是一个生产系统 在下面的jconsole屏幕截图中,您可以看到线程数在
jconsole
,以了解线程泄漏的情况。我不愿意安装其他(或非默认)工具来解决此问题,因为这是一个生产系统
在下面的jconsole屏幕截图中,您可以看到线程数在增长;Tomcat/catalina进程在08:52停止,在线程数达到893个线程的最大值后几分钟
根据请求
元件:连接器
- 我所说的“Tomcat崩溃”是指没有更多的事件被记录到
文件中,以及3个webapps的所有日志文件中。只有底层apache正在记录事件,其中包含HTTP 500错误catalina.log
瞧,线程转储突然看起来很友好。这也是在紧要关头通过番石榴完成的/谢谢你的回答。然而,这是一个生产系统,所以说实话,我想避免这么大的变化。我希望有一种不太复杂的方法……另一种方法是这样做,但只能在单独的性能测试环境中,并模拟用户使用Selenium、JMeter、Gatling或类似工具访问系统。这是一个Tomcat实例吗?Tomcat“崩溃”是什么意思?请编辑您的问题,将Tomcat的
conf/server.xml
文件中的活动
元素包括在内。请记住清理任何机密信息,如密码。@ChristopherSchultz:done。不确定我插入的连接器
信息是否就是您要查找的,但Tomcat进程是否还在运行?Tomcat变得完全惰性是很不寻常的。如果进程正在运行,则进行线程转储并查看所有线程都在做什么。该连接器上的线程限制为600,因此必须有其他东西在创建这些额外线程。日志文件中是否有任何东西可以解释发生了什么?jstack没有给出任何提示的线索(它应该显示一段时间后空闲的大量线程…)