`
44424742
  • 浏览: 235325 次
  • 性别: 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();
}
}
}
}

分享到:
评论

相关推荐

    jmx 实现远程连接tomcat

    jmx 实现远程连接tomcat jmx(Java Management Extensions)是一种Java技术,用于监控和管理Java应用程序。下面我们将详细介绍如何使用jmx实现远程连接tomcat。 一、配置环境 首先,我们需要确保Linux下配置好...

    jmx 监控 tomcat

    默认情况下,JMX连接器是不安全的,任何人都可以访问。为了保护服务器,你需要在`conf/server.xml`中添加安全约束。创建一个新的`&lt;Engine&gt;`或`&lt;Host&gt;`元素,并添加`&lt;Realm&gt;`和`&lt;Valve&gt;`元素以进行身份验证和授权。...

    jmx_tomcat_jboss

    2. **示例脚本**:使用JMX客户端工具(如jconsole或jvisualvm)连接到Tomcat或JBoss服务器的示例。 3. **MBean定义**:可能包含自定义MBean的Java源代码,这些MBean可以扩展服务器的功能或提供特定的监控指标。 4. *...

    tomcat开启远程jmx连接方式

    **Tomcat开启远程JMX连接方式详解** Java Management Extensions (JMX) 是Java平台提供的一种标准管理框架,它允许开发者创建、管理和监控应用程序的各种资源,包括服务器、应用程序、设备和服务。在Tomcat这样的...

    基于Spring+JMX+Tomcat实现资源动态管理

    4. 连接和管理:通过JConsole或其他JMX客户端工具,如VisualVM或JMC(Java Mission Control),连接到运行中的Tomcat实例,找到并操作注册的MBeans,实现资源的动态管理。 JMX与Spring的结合使得开发者能够轻松地...

    boundary-plugin-jmx-tomcat:从 Apache Tomcat 实例收集指标

    2. **JMX 连接**:JMX 连接可以通过 RMI 协议进行,你需要确保 Tomcat 的 JMX Remote Lifecycle Listener 已启用,并且防火墙允许相应的端口通信。在 `server.xml` 文件中,你可以找到或添加 `&lt;Connector&gt;` 元素来...

    tomcat 远程监控 ,jmx连接工具

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

    Monitoring Apache Tomcat with JMX.pdf

    "Monitoring Apache Tomcat with JMX" 是一种利用Java管理扩展(Java Management Extensions, 简称JMX)来实现这一目标的方法。JMX是一种标准的API,允许我们管理和监控Java应用程序,包括Tomcat,获取各种运行时...

    jmx监控weblogic,tomcat,websphere源码

    开发者可以使用JMX MBeans(Managed Beans)来获取Tomcat的运行数据,例如HTTP连接器的统计信息、线程池状态和Web应用程序的详细信息。 WebSphere是IBM公司的旗舰级应用服务器,它也提供了丰富的JMX支持。通过JMX,...

    cmdline-jmxclient-0.10.3.jar + zabbix tomcat监控模板

    - Zabbix提供了JMX接口,允许通过JMX连接收集数据。 - 配置:在Zabbix服务器上创建JMX监控项,指定Tomcat服务器的地址、端口、用户名和密码(如果Tomcat启用了JMX安全)。 - 模板:`zabbix tomcat监控模板`包含了...

    zabbix监控tomcat所需的cmdline-jmxclient-0.10.3.jar和zbx自定义模版

    首先,`cmdline-jmxclient-0.10.3.jar`是一个Java管理扩展(JMX)客户端,它允许通过命令行接口连接到Tomcat服务器,获取和操作JMX MBeans(管理Bean),从而获取Tomcat的运行时信息,如线程池状态、内存使用情况、...

    tomcat配置 连接数(优化)

    6. **监控和调整**:使用监控工具(如JMX或第三方工具)监控Tomcat的运行状态,根据实际负载情况动态调整配置。 7. **其他优化**:除了上述配置,还可以考虑使用负载均衡器,如Apache或Nginx,分散到多个Tomcat实例...

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

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

    jmx三种访问方式

    1. **远程JMX连接**:Java默认使用Remote Method Invocation (RMI) 协议来实现远程JMX连接。通过设置`-Dcom.sun.management.jmxremote.rmi.port`和`-Dcom.sun.management.jmxremote.port`等参数,可以启用RMI服务,...

    tomcat_weblogic_jmx.txt

    此时,Tomcat 将会监听指定的端口,并允许远程 JMX 连接。 #### 三、WebLogic JMX 开通步骤 **1. 修改环境变量** 与 Tomcat 类似,在 WebLogic Server 中启用 JMX 需要修改启动脚本。对于 WebLogic 来说,通常...

    Tomcat连接池的配置

    此外,还可以考虑使用连接池监控工具,如JMX,监控连接池的状态,以便及时调整参数。 总结来说,配置Tomcat连接池是提升Web应用数据库访问性能的重要步骤。通过合理配置连接池参数,可以有效管理数据库连接,避免...

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

    - `-Dcom.sun.management.jmxremote.port=7091`: 指定JMX连接的端口号,可以根据需要自定义,但要确保该端口没有被其他服务占用。 - `-Dcom.sun.management.jmxremote.ssl=false`: 如果不希望使用SSL加密连接,设置...

    java web项目配置tomcat连接池的那些搓事

    - **连接池的监控**:可以利用JMX(Java Management Extensions)来监控连接池的状态,包括活动连接数、等待队列长度等。 - **事务管理**:根据业务需求,配置事务的隔离级别、超时时间等。 - **连接验证**:设置...

    cmdline-jmxclient.zip

    标题“cmdline-jmxclient.zip”指的是一个包含命令行界面的Java管理扩展(JMX)客户端工具,这个工具主要用于远程连接并监控Java虚拟机(JVM)以及运行在其中的应用,比如Tomcat服务器。JMX是一种Java平台提供的标准...

    《jmx技术介绍》配套源代码

    这些例子可以帮助读者快速上手,理解如何创建、注册MBeans,如何通过MBean Server进行操作,以及如何设置和使用JMX连接器。通过实践,学习者可以更深入地掌握JMX的精髓。 总结来说,JMX是Java平台的重要管理工具,...

Global site tag (gtag.js) - Google Analytics