Tomcat 线程监控 Mbeans 说明

标签 tomcat monitoring threadpool jmx

在 Catalina.ThreadPool 下看到的 Tomcat 的线程相关 Mbeans。

有不同的属性即。 maxThreads、currentThreadCount、currentThreadsBusy 等

那么,从哪里可以得到这些Mbean属性的描述, 这些属性中的每一个都表示什么,我需要将其包含在我的监控自动化代码中,这将提供线程利用率统计信息。

也可能我想看源代码,我在哪里可以得到它?

当我看到 Mbean 类名(通过 jconsole)时,它显示为 org.apache.tomcat.util.modeler.BaseModelMBean,但是当我查看 BaseModelMBean 的源代码时,我发现既没有字段也没有数据成员代表这些该类的上述部分属性或其实现的接口(interface)。

那么这里代表的是 Mbean 的哪个实现??

最佳答案

maxThreads、currentThreadCount、currentThreadsBusy JMX 属性与 Tomcat 连接器用来处理传入请求的线程池相关。您可以在应用程序线程列表中看到通常名为 http-nio-[port-number]-exec-[sequence-number] 的线程。 当一个请求到达Connector时,Connector通过线程池的方式为其分配一个线程,这个线程一直处于“忙碌”状态,直到请求处理完毕。因此,currentThreadsBusy 反射(reflect)了当前正在处理的请求数。

ma​​xThreads 定义您在任何情况下都不想超过的线程数。当 currentThreadsBusy 计数器达到 maxThreads 阈值时,将无法处理更多请求,应用程序将阻塞。

currentThreadCount 表示线程池当前拥有的线程数量,包括忙线程和空闲线程,如果线程池在一段时间内未使用线程池将终止某些线程或创建新线程,up到maxThreads,如果有需求,详见下文。

“在幕后”,自 Tomcat 7 以来,org.apache.tomcat.util.net.AbstractEndpoint 即负责线程管理等。如果它使用 java.util.concurrent.ThreadPoolExecutor 作为线程池(默认选择),maxThreads 映射到 ThreadPoolExecutor 的 maximumPoolSize,currentThreadsBusy - 到 activeCount 和 currentThreadCount - 到 poolSize

话虽如此,currentThreadsBusy监控网络应用程序健康状况的最佳选择。 maxThreads 更像是一个静态值(除非您随意动态更改它)。 currentThreadCount 可能提供一些有用的信息,但有一定的时间延迟。

//与答案无关。添加此文本是为了克服 stackoverflow 的验证,即编辑应至少为 6 个字符,但情况并非总是如此,特别是对于与计算机编程相关的答案。 SFO 应重新考虑此验证。

^ 同意以上观点,感谢编辑。 igor.zh.

关于Tomcat 线程监控 Mbeans 说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7790303/

相关文章:

java - 请求的资源上存在 GWT-No 'Access-Control-Allow-Origin' header

mysql - 通过 JDBC Realm 的 Tomcat 6.0 管理器身份验证

postgresql - 确定真空后的自由空间

java - 装饰 Java 的可调用对象以添加行为

java - HTTP 状态 500 - 实例化 servlet 类 pkg.coreServlet 时出错

scala - 如何制作 sbt 容器 :start run tomcat?

database - 跟踪数据库的变化

linux - 检查 Zabbix 触发器中两个字符串类型项的值是否相等

c# - 这是对 ThreadPool 的适当使用吗?我能确定它会为每个任务启动一个线程吗?

c# - 如何让程序不使用100% cpu?