`
44424742
  • 浏览: 224569 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

JMX连接Tomcat (

阅读更多

JMX连接Tomcat (2011-01-02 22:08:59)

分类: Java学习
<!-- 正文开始 -->

OS:xp

jdk:1.6

Tomcat:6.0.29

1.Java的环境变量配置正确,网上很多,不再说了

2.修改Tomcat目录下的bin\catalina.bat

在该文件中查找set JAVA_OPTS=%JAVA_OPTS%,下面有一行为:

rem ----- Execute The Requested Command ---------------------------------------

在这一行的下面加

set JAVA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9008 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

说明:9008为端口号,一会儿要用到。很多地方说tomcat需要权限验证,可是我这里没有用到,就可以连接成功,所以没有测试密码文件,仅将Dcom.sun.management.jmxremote.authenticate的值设为false。

3.记得编辑完bin\catalina.bat后,一定要双击执行。直接双击就可以,不要在cmd中执行,我执行出错(不知道为什么)

4.双击bin\startup.bat,最好双击执行,我在cmd中执行,无法启动Tomcat

5.在cmd中执行netstat -an,可查看到9008端口已经启用,说明Tomcat的Jmx配置成功

JMX连接Tomcat

6.在cmd中敲入:jconsole(这个exe令在C:\Program Files\Java\jdk1.6.0_23\bin,即安装目录的bin下),即可启动jconsole的管理界面,在界面中输入如下内容:

service:jmx:rmi:///jndi/rmi://localhost:9008/jmxrmi

JMX连接Tomcat
或者

localhost:9008

JMX连接Tomcat

即可进入管理界面,在管理界面的Tab页MBeans中,可以看到所有的MBeans

JMX连接Tomcat

此时,Jmx监控Tomcat配置成功!

下面在代码中使用Jmx获取Tomcat中MBean的值

import java.util.*;
import javax.management.*;
import javax.management.remote.*;;


public class JmxTest {


public static void main(String[] args) {
// TODO Auto-generated method stub
try
{

--这里的url是在上图中输入的url
JMXServiceURL url=new JMXServiceURL ("service:jmx:rmi:///jndi/rmi://localhost:9008/jmxrmi");
//Map<String, String[]> map = new HashMap(); 
//String[] credentials=new String[] {"monitorRole","QED"}; 
//map.put("jmx.remote.credentials",credentials);

JMXConnector conn=JMXConnectorFactory.connect(url);
System.out.println("JMXConnector="+conn.toString());
String id=conn.getConnectionId();
System.out.println("Connection Id=" + id);

MBeanServerConnection mbsc = conn.getMBeanServerConnection();
String domains[]=mbsc.getDomains();
System.out.println("# of domains="+domains.length);
for (int i = 0; i < domains.length; i++)
{
System.out.println("Domain[" + i + "]=" + domains[i]);
}


Set<ObjectInstance> MBeanset = mbsc.queryMBeans(null, null);
System.out.println("MBeanset.size() : " + MBeanset.size());
Iterator<ObjectInstance> MBeansetIterator = MBeanset.iterator();
while (MBeansetIterator.hasNext())
{
ObjectInstance objectInstance = (ObjectInstance)MBeansetIterator.next();
ObjectName objectName= objectInstance.getObjectName();
String canonicalName= objectName.getCanonicalName();

System.out.println("canonicalName : " + canonicalName);

--在上图中,有Catalina:type=Server的port的值8005,运行程序后,在控制台能看到获取成功
if (objectName.toString().equals("Catalina:type=Server"))
{
// Get details of cluster MBeans
String s = mbsc.getAttribute(objectName, "port").toString();
System.out.println("=========================================");
System.out.println(s);
System.out.println("=========================================");
}
//String canonicalKeyPropList=objectName.getCanonicalKeyPropertyListString();
}
conn.close();
}
catch(Exception ex)
{
System.out.println("Illegal Argument Exception: " + ex);
}
}

}

下面是经过整理的代码,里面有一部分垃圾代码,大家可以选择性的看。

import java.math.BigDecimal;
import java.util.*;
import javax.management.*;
import javax.management.remote.*;
import javax.naming.Context;

public class JmxTest {


public static void main(String[] args) {
JMXConnector conn = null;
try
{
MBeanServerConnection mbsc = ConnJmx(conn);

String KeyName = "";
String objectName = "";
String attributeName = "";
String attributeKey = "";
String value = "";

objectName = "java.lang:type=Memory";
attributeName = "NonHeapMemoryUsage";
attributeKey = "init";
value = GetValueByKey(objectName, attributeName, attributeKey);
PrintContext(attributeName,value);

KeyName = "进程数";
objectName = "java.lang:type=Threading";
attributeName = "ThreadCount";
attributeKey = "";
value = GetValueByKey(mbsc, objectName, attributeName, attributeKey);
PrintContext(attributeName,value);

KeyName = "正常运行时间";
objectName = "java.lang:type=Runtime";
attributeName = "Uptime";
attributeKey = "";
value = GetValueByKey(mbsc, objectName, attributeName, attributeKey);
//System.out.println(attributeName + "=" + value);
//value = ConvertMillToText(Long.parseLong(value));
PrintContext(attributeName,value);
}
catch(Exception ex)
{
System.out.println("Exception: " + ex);
}
finally
{
try
{
if (conn != null)
{
conn.close();
}
}
catch(Exception ex1){}
}
}

private static void PrintContext(String key, String value)
{
System.out.println(key + "=" + value);
}

//从毫秒转至小时分钟
private static String ConvertMillToText(long millsecond)throws Exception
{
try
{
String s = "";
double d = (double)millsecond / (double)(1000*60*60);
BigDecimal b = new BigDecimal(d);
int hour = (int)Math.floor(d);
double minute = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
if (hour > 0)
{
s = hour + " 小时 ";
}
minute = (minute - hour) * 60;
b = new BigDecimal(minute);
minute = b.setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue();
s += (int)minute + " 分钟";

return s;
}
catch(Exception ex)
{
System.out.println("Exception: " + ex);
throw ex;
}
}

//连接到jmx
private static MBeanServerConnection ConnJmx(JMXConnector conn)throws Exception
{
try
{
String _value = "";

JMXServiceURL url = new JMXServiceURL ("service:jmx:iiop:///jndi/corbaname::1.2@192.168.1.146:6888#jmx/rmi/RMIConnectorServer");
HashMap map = new HashMap();
String[] credentials=new String[] {"admin","admin"};
map.put("jmx.remote.credentials",credentials);

conn = JMXConnectorFactory.connect(url, map);
String id=conn.getConnectionId();

MBeanServerConnection mbsc = conn.getMBeanServerConnection();
return mbsc;
}
catch(Exception ex)
{
System.out.println("Illegal Argument Exception: " + ex);
throw ex;
}
}

//从MBeanServerConnection中取值
private static String GetValueByKey(MBeanServerConnection mbsc, String objectName, String attributeName, String attributeKey)throws Exception
{
try
{
String _value = "";

ObjectName _objectName = new ObjectName(objectName);
if (attributeKey.equals(""))
{
_value = mbsc.getAttribute(_objectName, attributeName).toString();
}
else
{
javax.management.openmbean.CompositeData data = (javax.management.openmbean.CompositeData)mbsc.getAttribute(_objectName, attributeName);
_value = data.get(attributeKey).toString();
}

return _value;
}
catch(Exception ex)
{
System.out.println("Illegal Argument Exception: " + ex);
throw ex;
}
}


private static String GetValueByKey(String objectName, String attributeName, String attributeKey)throws Exception
{
JMXConnector conn = null;
try
{
String _value = "";

JMXServiceURL url=new JMXServiceURL ("service:jmx:iiop:///jndi/corbaname::1.2@192.168.1.146:6888#jmx/rmi/RMIConnectorServer");
HashMap map = new HashMap();
String[] credentials=new String[] {"admin","admin"};
map.put("jmx.remote.credentials",credentials);

conn = JMXConnectorFactory.connect(url, map);
String id=conn.getConnectionId();

MBeanServerConnection mbsc = conn.getMBeanServerConnection();
//Set<ObjectInstance> MBeanset = mbsc.queryMBeans("java.lang:type=Memory", null);
//Set<ObjectInstance> MBeanset = mbsc.queryMBeans(null, null);
ObjectName _objectName = new ObjectName(objectName);
if (attributeKey.equals(""))
{
_value = mbsc.getAttribute(_objectName, attributeName).toString();
}
else
{
javax.management.openmbean.CompositeData data = (javax.management.openmbean.CompositeData)mbsc.getAttribute(_objectName, attributeName);
_value = data.get(attributeKey).toString();
}

return _value;
}
catch(Exception ex)
{
System.out.println("Illegal Argument Exception: " + ex);
throw ex;
}
finally
{
if (conn != null)
{
conn.close();
}
}
}


private static void TestConn()throws Exception
{
JMXConnector conn = null;
try
{
//JMXServiceURL url=new JMXServiceURL ("service:jmx:rmi:///jndi/rmi://localhost:9008/jmxrmi");
JMXServiceURL url=new JMXServiceURL ("service:jmx:iiop:///jndi/corbaname::1.2@192.168.1.146:6888#jmx/rmi/RMIConnectorServer");
HashMap map = new HashMap();
String[] credentials=new String[] {"admin","admin"};
map.put("jmx.remote.credentials",credentials);

conn = JMXConnectorFactory.connect(url, map);
System.out.println("JMXConnector="+conn.toString());
String id=conn.getConnectionId();
System.out.println("Connection Id=" + id);

MBeanServerConnection mbsc = conn.getMBeanServerConnection();
String domains[]=mbsc.getDomains();
System.out.println("# of domains="+domains.length);
for (int i = 0; i < domains.length; i++)
{
System.out.println("Domain[" + i + "]=" + domains[i]);
}

Set<ObjectInstance> MBeanset = mbsc.queryMBeans(null, null);
System.out.println("MBeanset.size() : " + MBeanset.size());
Iterator<ObjectInstance> MBeansetIterator = MBeanset.iterator();
while (MBeansetIterator.hasNext())
{
ObjectInstance objectInstance = (ObjectInstance)MBeansetIterator.next();
ObjectName objectName= objectInstance.getObjectName();
String canonicalName= objectName.getCanonicalName();

System.out.println("canonicalName : " + canonicalName);
if (objectName.toString().equals("Catalina:type=Server"))
{
// Get details of cluster MBeans
String s = mbsc.getAttribute(objectName, "port").toString();
System.out.println("=========================================");
System.out.println(s);
System.out.println("=========================================");
}
//String canonicalKeyPropList=objectName.getCanonicalKeyPropertyListString();
}
conn.close();
}
catch(Exception ex)
{
System.out.println("Illegal Argument Exception: " + ex);
throw ex;
}
finally
{
if (conn != null)
{
conn.close();
}
}
}
}

分享到:
评论

相关推荐

    tomcat开启远程jmx连接方式

    tomcat开启远程jmx连接方式包括tomcat5 6 7 windows版本开启远程jmx连接监控

    jmx 实现远程连接tomcat

    本文档主要介绍了jmx连接T远程监控tomcat的详细配置,文档包含了一些配置的详细图片和需要注意的内容

    tomcat 远程监控 ,jmx连接工具

    云服务上的tomcat监控使用到的jar包,需要的可以直接下载,注意tomcat的版本需要和jar包的版本对应

    通过Tomcat开启JMX监控的方法图解

    环境准备我们这里就不直接演示了,直接配置tomcat的jmx  1、进入到tomcat的bin目录下  # cd /opt/tomcat/apache-tomcat-8.0.48/bin/  2、编辑配置文件  # vim catalina.sh  3、在下图中上面添加参数    参数...

    Tomcat开启JMX功能,使jdk自带的JVisvualVM工具连接JVM,轻松进行性能分析(csdn)————.pdf

    Tomcat开启JMX功能,使jdk自带的JVisvualVM工具连接JVM,轻松进行性能分析(csdn)————

    《深入剖析Tomcat(中文版+英文版)》.rar

    第4章 tomcat的默认连接器 4.1 http 1.1的新特性 4.1.1 持久连接 4.1.2 块编码 4.1.3 状态码100的使用 4.2 connector接口 4.3 httpconnector类 4.3.1 创建服务器套接字 4.3.2 维护httpprocessor实例 4.3.3...

    tomcat深入剖析.pdf

    从连接器到最终的JMX管理,循序渐进,层层深入。每一章有配有相关代码,既是对理论内容的具体展现,也可以帮助读者编写一个实用的应用服务器。 在内容上,《深入剖析Tomcat》更关注对Tomcat基本体系结构的讲解,并...

    tomcat6、7、8、9, maven3.5

    3.1版本包含对Apache Tomcat 3.0的几个改进,包括servlet重新加载,WAR文件支持和为IIS和Netscape Web服务器添加的连接器。最新的维护版本3.1.1包含了对安全问题的修复。Apache Tomcat 3.1.x没有进行积极的开发。...

    HowTomcatWorks:《深度剖析Tomcat》原始码及笔记

    第四章Tomcat的默认连接器 第五章servlet容器 第六章生命周期 第七章日志记录器 第八章加载器 第九章会议管理 第十章应用程序 第十一章StandardWrapper 第十二章StandardContext 第十三章主机和引擎 第十四章服务器...

    MC4J配置(Tomcat篇)2

    视频文件---! &lt;br&gt;基于JMX,用MC4j远程监控Tomcat5.5 用MC4J实现JMX远程监测与管理

    JConsole_远程监控Tomcat_ricky

    JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,不过此JVM需要使用可管理的模式启动。如果要把一个应用以可管理的形式启动,可以在启动是设置com.sun.management.jmxremote。JConsole能够提供被监控虚拟机...

    how-tomcat-works

    第4章 tomcat的默认连接器 18 4.1 简介 18 4.2 HTTP1.1的新特性 18 4.2.1 持久化连接 18 4.2.2 编码 18 4.2.3 状态码100的使用 19 4.3 Connector接口 19 4.4 HttpConnector类 20 4.4.1 创建ServerSocket 20 4.4.2 ...

    How Tomcat Works: A Guide to Developing Your Own Java Servlet Container

    第4章 tomcat的默认连接器 18 4.1 简介 18 4.2 HTTP1.1的新特性 18 4.2.1 持久化连接 18 4.2.2 编码 18 4.2.3 状态码100的使用 19 4.3 Connector接口 19 4.4 HttpConnector类 20 4.4.1 创建ServerSocket 20 4.4.2 ...

    web服务器和应用服务器.docx

    而Apache是一个WEB服务器f(HTTP服务器),后来连接Tomcat使用服务器来支持java。 二、另述 WEB服务器、使用程序服务器、HTTP服务器有何区别?IIS、Apache、Tomcat、Weblogic、WebSphere都各属于哪种服务器,这些...

    alfresco-support-tools:用于管理控制台的Alfresco支持工具(Alfresco 4.2.x)

    由于缺少JMX连接,它在Alfresco Community Edition上不起作用。 从客户端进行了测试,可以与当前版本的Firefox,IE和Chrome一起使用。下载可以从的Alfresco Artifact存储库下载所有源代码/二进制发行版。 另外,...

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ 17-tomcat中连接器.avi │ 18-禁用AJP连接器.avi │ 19-tomcat中JVM参数优化.avi │ ├─补充2:Redis3.0新特性、主从复制、集群视频教程 │ │ 打开必读.txt │ │ │ ├─相关资料 │ │ redis-3.0.1.tar.gz ...

    smslet

    系统支持JMX的管理方式,jmx客户端都可以通过系统端口连接系统,以便对系统进行动态管理。由于系统是一个标准的servlet容器,消息的请求与应答都是标准的 ServletRequest和ServletResponse,为了能和各种短信网关...

    java开源包4

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    springboot参考指南

    启用Tomcat的多连接器(Multiple Connectors) viii. 64.8. 在前端代理服务器后使用Tomcat ix. 64.9. 使用Jetty替代Tomcat x. 64.10. 配置Jetty xi. 64.11. 使用Undertow替代Tomcat xii. 64.12. 配置Undertow xiii....

Global site tag (gtag.js) - Google Analytics