关于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版本的哈)。
以上代码是能达到你的需求的,当然还有待你的改进,有问题继续联络。
|