首页 > 解决方案 > 如何找出哪个tomcat webapp有线程泄漏?

问题描述

在一个运行 3 个 Tomcat webapps 的生产系统中,我们最近注意到 Tomcat 由于线程泄漏而崩溃。三个 webap 中的两个相互影响,我想找出这两个组件中的哪一个导致了这个线程的建立。

问题:有什么好的方法/工具可以找出 3 个 webapp 中的哪个有线程泄漏?

我的java技能很生疏。我对Tomcat不是很熟悉,并且随着我的发展而发现。我启动jconsole以了解线程泄漏。我不愿意安装额外的(或非默认的)工具来解决这个问题,因为这是一个生产系统。

在下面的 jconsole 屏幕截图中,您可以看到线程数在增加;Tomcat/catalina 进程在 08:52 停止,几分钟后线程数达到 893 个线程。

控制台

根据要求,

标签: multithreadingtomcatjconsole

解决方案


不确定您是否可以在系统上部署新代码。

在类似情况下帮助我的最简单更改(也使用 tomcat)是给每个执行程序/线程池/线程一个有意义的名称,该名称可以追溯到 webapp创建线程的模块。

瞧,线程转储突然看起来很友好。这也是在紧要关头通过 guava/ ThreadFactoryBuilder完成的。


推荐阅读