使用 MBean 和 日志查看 Tomcat 线程池核心属性数据
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.util.Set;
public class TomcatThreadPoolStatus {
public static void main(String[] args) throws IOException {
// 获取 JVM 的 MBeanServer 连接
MBeanServerConnection mbs = ManagementFactory.getPlatformMBeanServer();
// 查询所有与 "Catalina" 相关的 MBean,通常 Catalina 是 Tomcat 的 MBean 名称
Set<ObjectName> names = mbs.queryNames(new ObjectName("Catalina:type=Executor,name=\"tomcatThreadPool\""), null);
// 假设我们只有一个执行器,且名称为 "tomcatThreadPool"
for (ObjectName on : names) {
// 获取属性
String maxThreads = mbs.getAttribute(on, "maxThreads").toString();
String currentThreadCount = mbs.getAttribute(on, "currentThreadCount").toString();
String currentThreadPoolSize = mbs.getAttribute(on, "currentThreadPoolSize").toString();
String queueSize = mbs.getAttribute(on, "queueSize").toString();
// 打印获取的属性值
System.out.println("maxThreads: " + maxThreads);
System.out.println("currentThreadCount: " + currentThreadCount);
System.out.println("currentThreadPoolSize: " + currentThreadPoolSize);
System.out.println("queueSize: " + queueSize);
}
}
}
这段代码演示了如何通过 JMX API 连接到 JVM 的 MBean 服务器,并查询与 "Catalina" 相关的执行器 MBean,以获取 Tomcat 线程池的核心属性数据。这对于监控和调优 Tomcat 性能非常有帮助。
评论已关闭