如何监控/记录Tomcat的线程池?

Ale*_*x P 31 java multithreading tomcat pool ajp

我有一个Tomcat安装,我怀疑由于线程未正确释放,线程池可能会随着时间的推移而减少.当达到maxthreads时,我在catalina.out中出现错误,但我想每五分钟将使用的线程数记录到一个文件中,这样我就可以验证这个假设.请问有谁可以建议如何做到这一点?

此外,在此安装中没有Tomcat管理器,看起来原始安装的人由于某种原因删除了管理器webapp.我不确定经理是否能够执行上述操作,或者我是否可以在不损坏现有安装的情况下重新安装它?我真正想做的就是跟踪线程池.

另外,我注意到Tomcat的maxthreads是200,但Apache的最大并发连接数较低(Apache使用mod_proxy和mod_proxy_ajp(AJP 1.3)来提供Tomcat).这似乎也错了,这些数字之间的正确关系是什么?

任何帮助非常感谢:D

更新:只是一个快速更新,说直接JMX访问工作.但是我还必须设置Dcom.sun.management.jmxremote.host.我把它设置为localhost并且它工作,但没有它没有骰子.如果其他人在尝试启用JMX时遇到类似问题,我建议您也设置此值,即使您从本地计算机进行连接也是如此.似乎某些版本的Tomcat需要它.


只是快速更新,说直接JMX访问工作.但是我还必须设置Dcom.sun.management.jmxremote.host.我把它设置为localhost并且它工作,但没有它没有骰子.如果其他人在尝试启用JMX时遇到类似问题,我建议您也设置此值,即使您从本地计算机进行连接也是如此.似乎某些版本的Tomcat需要它.

Tom*_*icz 15

直接JMX访问

尝试将此添加到catalina.sh/ bat:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=5005
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
Run Code Online (Sandbox Code Playgroud)

更新:Alex P建议在某些情况下可能还需要以下设置:

-Dcom.sun.management.jmxremote.host=localhost
Run Code Online (Sandbox Code Playgroud)

这样就可以在端口5005上实现远程匿名JMX连接.您还可以考虑使用JVisualVM,它可以通过插件浏览JMX.

您正在寻找的是Catalina- > ThreadPool- > http-bio-8080- >各种有趣的指标.

JMX代理servlet

更简单的方法可能是使用Tomcat的JMX代理servlet:http:// localhost:8080/manager/jmxproxy.例如,尝试此查询:

$ curl --user tomcat:tomcat http://localhost:8080/manager/jmxproxy?qry=Catalina:name=%22http-bio-8080%22,type=ThreadPool
Run Code Online (Sandbox Code Playgroud)

一点点grepping和脚本,您可以轻松地远程监控您的应用程序.请注意,这tomcat:tomcat是具有manager-jmx角色的用户的用户名/密码conf/tomcat-users.xml.