我有一个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需要它。
答案 0 :(得分:15)
尝试将其添加到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
更新: Alex P 建议在某些情况下可能还需要以下设置:
-Dcom.sun.management.jmxremote.host=localhost
这可以在端口5005上启用远程匿名JMX连接。您也可以考虑使用JVisualVM,它可以通过插件浏览JMX。
您要找的是Catalina
- > ThreadPool
- > http-bio-8080
- >各种有趣的指标。
更简单的方法可能是在JMX proxy servlet下使用Tomcat的http://localhost:8080/manager/jmxproxy。例如,尝试此查询:
$ curl --user tomcat:tomcat http://localhost:8080/manager/jmxproxy?qry=Catalina:name=%22http-bio-8080%22,type=ThreadPool
一点grep
ping和脚本,您可以轻松地远程监控您的应用程序。请注意,tomcat:tomcat
是在manager-jmx
中拥有conf/tomcat-users.xml
角色的用户的用户名/密码。
答案 1 :(得分:2)
获得更多企业解决方案。我一直在我们的生产环境中使用New Relic。
这提供了线程池随时间变化的图表。
答案 2 :(得分:2)
您可以部署jolokia.war,然后在JSON中检索mbeans值(没有经理):
http://localhost:8080/jolokia/read/Catalina:name=*,type=ThreadPool?ignoreErrors=true
如果您只想要一些值(currentThreadsBusy,maxThreads,currentThreadCount,connectionCount):
{
request: {
mbean: "Catalina:name="http-nio-8080",type=ThreadPool",
attribute: [
"currentThreadsBusy",
"maxThreads",
"currentThreadCount",
"connectionCount"
],
type: "read"
},
value: {
currentThreadsBusy: 1,
connectionCount: 4,
currentThreadCount: 10,
maxThreads: 200
},
timestamp: 1490396960,
status: 200
}
注意:此示例适用于Tomcat7 +。