關於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();
}
}
}
這個代碼不許要設置CLASSPATH了,有JDK就行(當然應該是1.5版本的哈)。
以上代碼是能達到你的需求的,當然還有待你的改進,有問題繼續聯絡。
|