当前位置: 代码迷 >> J2EE >> tomcat监控需要用到jmx,该如何处理
  详细解决方案

tomcat监控需要用到jmx,该如何处理

热度:257   发布时间:2016-04-22 03:17:33.0
tomcat监控需要用到jmx
本人的目的,只是要知道tomcat的线程数是不是达到峰值。
因为,当请求达到峰值后,客户端连登陆界面都打不开。我只是想监控捕捉这种情况。
查到资料,说可以用jmx,但,确实不懂。找了很多资料。
请帮忙指点,我怎么得到TOMCAT的线程数。
因为以后会把tomcat升级到成weblogic,JMX也可用在weblogic。
我在tomcat只部署一个应用,想在这个应用的上面增加得到线程数的内容。
email:jybbh@163.com
QQ:47171064

------解决方案--------------------
先顶上去,回头我参与捉摸。。。。
------解决方案--------------------
关于JMX,我还是建议你去看JDK文档,我这里只是稍微的说说。

在JMX里面,
1,所有的MBean(你把他理解为一个JAVA对象得了)都会被用一个javax.management.ObjectName对象与之相关联。
2,我们可以通过javax.management.MBeanServerConnection取得一个连接,这个连接就是我们访问JAVA对象的代理
3,通过2的连接可以调用注册在MBeanServer上的MBean的方法,以及属性取得。

你所需要做的事情有下面几件:
1,需要把你的Tomcat配置为支持JMX
2,需要获得与Tomcat的javax.management.MBeanServerConnection
3,需要知道“本人的目的,只是要知道tomcat的线程数是不是达到峰值”这件事情是有哪个MBean来提供(也就是找准ObjectName)
4, 需要知道“tomcat的线程数”在你找到的MBean中的属性名

首先我说明以下我做以上事情的环境是TOMCAT6.0
下面对以上四件事情分别对应的做法:
1,打开Tomcat 6.0\bin\tomcat6w,然后在“Java”的“Java Options”下面追加
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8050
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
语句,特别说明以下port不要用已经用过的端口就OK。

2,3,4见以下代码:
Java code
package com.test.thread;import javax.management.MBeanAttributeInfo;import javax.management.MBeanInfo;import javax.management.MBeanServerConnection;import javax.management.ObjectName;import javax.management.remote.JMXConnector;import javax.management.remote.JMXConnectorFactory;import javax.management.remote.JMXServiceURL;public class ThreadThreshold {    // mbean server connection    private static MBeanServerConnection mbsc = null;    /**     * @param args     */    public static void main(String[] args) {        try {            String jmxURL = "service:jmx:rmi:///jndi/rmi://localhost:8050/jmxrmi";//tomcat jmx url            JMXServiceURL serviceURL = new JMXServiceURL(jmxURL);            JMXConnector connector = JMXConnectorFactory.connect(serviceURL,                    null);            mbsc = connector.getMBeanServerConnection();            ObjectName threadObjName = new ObjectName(                    "Catalina:type=ThreadPool,name=http-8080");//这里说明一下,端口最好是动态取得                        MBeanInfo mbInfo = mbsc.getMBeanInfo(threadObjName);            String attrName = "currentThreadCount";//tomcat的线程数对应的属性值                        MBeanAttributeInfo[] mbAttributes = mbInfo.getAttributes();            System.out.println("currentThreadCount:"+mbsc.getAttribute(threadObjName, attrName));        } catch (Exception e) {            e.printStackTrace();        }    }}
  相关解决方案