`
jwfdp
  • 浏览: 48321 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JMX 远程监控 JBoos/Tomcat

 
阅读更多

● 启用JBoss JMX远程访问的身份验证:

在目录%JBoss_Home%/server\default\deploy 下找到文件 jmx-jboss-beans.xml,在该文件的大约21-23行,找到

<!--UNCOMMENT THIS <property name="securityDomain">jmx-console</property> -->去掉注释,修改为:

<property name="securityDomain">jmx-console</property>

JBoss 默认的用户名为:admin,密码为:admin。用户的访问权限为:JBossAdmin,HttpInvoker。

如果要修改用户名和密码,可以在目录%JBoss_Home%/server\default\conf\props 下找到文件 jmx-console-roles.properties,在里面进行修改即可。

如果要修改用户的访问权限,可以在目录%JBoss_Home%/server\default\conf\props 下找到文件 jmx-console-users.properties ,在里面进行修改即可。

JBoss JMX 远程访问的默认端口为:1090。.如果要修改该端口,可以在目录

%JBoss_Home%/server\default\conf\bindingservice.beans\META-INF 下找到文件 bindings-jboss-beans.xml ,大约在244 行,进行修改即可。

● 启用Tomcat JMX 远程访问身份验证:

因为Tomcat 是通过JDK 进行JMX 远程管理的,所以要在JDK 中添加username,password 和 访问权限。

找到目录 %JAVA_HOME%\jre\lib\management 下的文件 jmxremote.password.template 和 jmxremote.access。

jmxremote.password.template 是一个模板文件,提供了如何创建用户名和密码的格式,在最后可以看到JDK 提供了两个用户名和密码,只不过是通过“#”注释掉了,

然后再改目录下新建一个 jmxremote.password 文件,在这个新建的文件里添加用户名和密码,例如:admin admin。

jmxremote.access 文件是配置用户访问权限的,在最后添加 admin  readonly 或 admin readwrite。

再在目录%TOMCAT_HOME%\bin 下找到 文件 catalina.bat,编辑这个文件,在里面添加:


set JAVA_OPTS=%JAVA_OPTS% -Djava.rmi.server.hostname=192.168.100.126
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port="1090"   // 远程访问端口
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate="true"   // 身份验证
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.ssl="false"    //SSL验证

在window下,现需要jdk装在NTFS文件系统下,选中文件,点右键“属性”-〉安全,点“高级”,去掉“从父项继承....”,弹出窗口中选“删除”,这样删除了所有访问权限。再选“添加”-〉高级,“立即查找”,选中你的用户,例administrator,点“确定",“确定"。来到权限窗口,勾选"完全控制",点"确定",OK了。

● 通过jconsole 监控 JBoss/Tomcat

打开%JAVA_HOME%\bin\jconsole.exe 在“远程进程”中输入“192.168.0.88:1090”,用户名“admin”,口令 “admin”,就可监控 IP 为“192.168.0.88” 的JBoss/Tomcat 服务器。

● 通过Java 程序获得JBoss/Tomcat 中的信息

package com.demo.jmx.jconsole;

import java.lang.management.MemoryUsage;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.openmbean.CompositeDataSupport;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

public class JMXMonitor {

         private static final String URL = "service:jmx:rmi:///jndi/rmi://127.0.0.1:1090/jmxrmi";
         protected MBeanServerConnection  mbsc;
         private String path;
         private Integer maxActiveSessions;
         private Integer activeSessions;
         private Integer sessionCounter;
         private long maxMemory;
         private long committedMemory;
         private long usedMemory;
         private String protocolPort;
         private Integer maxThreads;
         private Integer currentThreadCount;
         private Integer currentThreadsBusy;
 
         public JMXMonitor() throws Exception{
                    JMXServiceURL serviceURL = new JMXServiceURL(URL);
                    Map<String,String[]>map = new HashMap<String,String[]>();   
                    String[] credentials = new String[] { "admin" , "admin" };   
                    map.put("jmx.remote.credentials", credentials);   
                    JMXConnector connector = JMXConnectorFactory.connect(serviceURL, map);   
                    mbsc = connector.getMBeanServerConnection(); 
          }
 
          public Map<?,?>createSessionCounter()throws Exception{
                     String objectName = "jboss.web:type=Manager,path=/*,host=localhost"; //JBoss
                     //String objectName1 = "Catalina:type=Manager,context=/*,host=localhost"; //Tomcat
                     ObjectName managerObjName = new ObjectName(objectName);
                     Set<ObjectName> set=mbsc.queryNames(managerObjName, null); 
                     Map<String,JMXMonitor> map = new HashMap<String,JMXMonitor>();
  
                     for (ObjectName obj:set){  
                              if(objectName.indexOf(objectName)!= -1)
                                       path = obj.getKeyProperty("path"); 
                              if(path.indexOf(objectName)!= -1)
                                       path = obj.getKeyProperty("context");
                              ObjectName objname = new ObjectName(obj.getCanonicalName()); 
                              maxActiveSessions = (Integer)mbsc.getAttribute( objname, "maxActiveSessions");
                              activeSessions = (Integer)mbsc.getAttribute( objname, "activeSessions");
                              sessionCounter = (Integer)mbsc.getAttribute( objname, "sessionCounter");  
                              map.put(path, this);
                     } 
                     return map;
            }
 
            public void createHeapMemoryCounter() throws Exception{
                       String objectName = "java.lang:type=Memory";
                       ObjectName heapObjName = new ObjectName(objectName);
                       CompositeDataSupport cds = (CompositeDataSupport)mbsc.getAttribute(heapObjName, "HeapMemoryUsage");
                       MemoryUsage heapMemoryUsage =  MemoryUsage.from(cds);
                       maxMemory = heapMemoryUsage.getMax();
                       committedMemory = heapMemoryUsage.getCommitted();
                       usedMemory = heapMemoryUsage.getUsed();
  
            }
 
            public Map<?,?>createThreadPoolCounter() throws Exception{
                      String objectName = "jboss.web:type=ThreadPool,name=*"//JBoss
                      //String objectName = "Catalina:type=ThreadPool,name=*"; //Tomcat
                      ObjectName threadPoolObjName = new ObjectName(objectName);
                      Set<ObjectName> set=mbsc.queryNames(threadPoolObjName, null);
                      Map<String,JMXMonitor> map = new HashMap<String,JMXMonitor>();
                      for (ObjectName obj:set){  
                             protocolPort = obj.getKeyProperty("name");
                             ObjectName objname=new ObjectName(obj.getCanonicalName()); 
                             maxThreads = (Integer)mbsc.getAttribute( objname, "maxThreads");
                             currentThreadCount = (Integer)mbsc.getAttribute( objname, "currentThreadCount");
                             currentThreadsBusy = (Integer)mbsc.getAttribute( objname, "currentThreadsBusy");
                             map.put(protocolPort, this);
                     }   
                      return map;
            }

            public String getPath() {
                      return path;
            }

            public Integer getMaxActiveSessions() {
                    return maxActiveSessions;
             }

             public Integer getActiveSessions() {
                   return activeSessions;
              }

              public Integer getSessionCounter() {
                    return sessionCounter;
              }

              public long getMaxMemory() {
                      return maxMemory;
              }

              public long getCommittedMemory() {
                       return committedMemory;
               }

               public long getUsedMemory() {
                       return usedMemory;
               }

               public String getProtocolPort() {
                        return protocolPort;
               }

               public Integer getMaxThreads() {
                       return maxThreads;
               }

               public Integer getCurrentThreadCount() {
                        return currentThreadCount;
               }

               public Integer getCurrentThreadsBusy() {
                        return currentThreadsBusy;
               }

}
     

测试类

package com.demo.jmx.jconsole;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class JMXTest {

              public static void main(String[] args) throws Exception{
                        JMXMonitor monitor = new JMXMonitor();
                        Map<?,?>sessionMap = monitor.createSessionCounter();
                        Set<?>pathSet = sessionMap.keySet();
                         Iterator<?>it = pathSet.iterator();
                        while(it.hasNext()){
                                  String path = (String)it.next();
                                  System.out.println("path:" + path);
                                  JMXMonitor seesionMonitor = (JMXMonitor)sessionMap.get(path);
                                  System.out.println("activeSessions:" + seesionMonitor.getActiveSessions());
                                  System.out.println("maxActiveSessions:" + seesionMonitor.getMaxActiveSessions());
                                  System.out.println("activeSessions:" + seesionMonitor.getSessionCounter());
                                  System.out.println();
                       }
  
                      System.out.println("#######################################################");
  
                      monitor.createHeapMemoryCounter();
                      long committedMemory = monitor.getCommittedMemory();
                      long maxMemory = monitor.getMaxMemory();
                      long usedMemory = monitor.getUsedMemory();
                      System.out.println("committedMemory:" + committedMemory);
                      System.out.println("maxMemory:" + maxMemory);
                      System.out.println("usedMemory:" + usedMemory);
  
                      System.out.println("#######################################################");
                      Map<?,?> threadPoolMap = monitor.createThreadPoolCounter();
                      Set<?> protocolPortSet = threadPoolMap.keySet();
                      Iterator<?>it1 = protocolPortSet.iterator();
                      while(it1.hasNext()){
                                  String protocolPort = (String)it1.next();
                                  System.out.println("protocol-Port:" + protocolPort);
                                  JMXMonitor threadPoolMonitor = (JMXMonitor)threadPoolMap.get(protocolPort);
                                  System.out.println("currentThreadCount:" + threadPoolMonitor.getCurrentThreadCount());
                                  System.out.println("currentThreadsBusy:" + threadPoolMonitor.getCurrentThreadsBusy());
                                  System.out.println("maxThreads:" + threadPoolMonitor.getMaxThreads());
                                  System.out.println();
                       }
              }

}

分享到:
评论

相关推荐

    jmx 实现远程连接tomcat

    jmx 实现远程连接tomcat jmx(Java Management Extensions)是一种Java技术,用于监控和管理Java应用程序。...通过以上步骤,我们可以成功实现jmx远程连接tomcat,实现在远程监控tomcat的应用程序。

    jmx监控weblogic,tomcat,websphere源码

    首先,WebLogic是由Oracle公司提供的一个全面的企业级Java应用服务器,它支持JMX来暴露管理接口,允许管理员远程监控服务器的状态、配置以及执行管理操作。通过JMX,你可以获取到WebLogic服务器的运行时信息,如JVM...

    JConsole远程监控Tomcat

    - 在`%TOMCAT_HOME%\bin\catalina.sh`文件中,修改`JAVA_OPTS`环境变量,添加JMX远程监控所需的参数: ```bash JAVA_OPTS="-Xms256m -Xmx512m -XX:MaxPermSize=128m -Dcom.sun.management.jmxremote.port=1090 -...

    JMX以RMI方式连接的场景示例

    我们的示例展示了如何使用JMX框架和RMI连接方式来实现远程监控和管理应用程序。JMX框架提供了一种灵活、可扩展和高效的方式来管理和监控应用程序,而RMI连接方式允许远程客户端访问MBean提供的管理功能。

    java jmx 远程监控

    java jmx 远程监控

    jboss远程调用JMX

    当我们谈论"jboss远程调用JMX"时,我们关注的是如何通过网络从一个JMX客户端连接到运行在JBoss服务器上的JMX服务,以便进行远程管理和监控。 首先,我们需要了解JMX的基本概念。MBean是JMX的核心,它是一个Java对象...

    JVisualVM远程监控linux服务器 tomcat

    ### JVisualVM远程监控Linux服务器上的Tomcat #### 一、引言 随着分布式系统的发展,对于部署在不同服务器上的应用程序进行性能监控变得尤为重要。Java应用程序(如Tomcat)的性能监控是确保服务稳定性和可扩展性...

    jmx 监控 tomcat

    在Tomcat的`conf/server.xml`文件中,找到`&lt;Server&gt;`标签,在其中添加一个`Service`,并配置一个`Connector`来启用RMI(Remote Method Invocation),以便远程访问JMX。示例如下: ```xml ...

    TongWeb7的JMX监控.doc

    在运维过程中,JMX(Java Management Extensions)监控是一个非常重要的工具,可以帮助我们实时查看和管理应用程序的状态,以及诊断和解决问题。本文将详细介绍如何使用 JMX 监控 TongWeb7。 首先,要开启 JMX 监控...

    JProfiler在Windows可视化远程监控Linux上Tomcat进程的安装步骤.pdf

    - 支持多种远程监控协议,包括JPDA (Java Platform Debugger Architecture)、JMX (Java Management Extensions)等。 **知识点三:安装和配置JProfiler** 1. **下载安装包** - 用户需要从官方网站下载适用于Windows...

    jmx监控activeMQ监控

    jmx监控ActiveMQ监控 jmx(Java Management Extensions)是一种Java技术,为Java应用程序提供了管理和监控的功能。ActiveMQ是Apache软件基金会下的一个开源消息队列系统,提供了高效、可靠的消息传递服务。在生产...

    JMX 远程服务器信息监控

    在本场景中,我们关注的是如何利用JMX来远程监控服务器上的关键资源,如CPU利用率、内存状态、已加载类的数量以及堆内存信息。下面将详细探讨这些知识点。 一、JMX 概述 JMX 是一种服务导向架构,它定义了管理和...

    jvisualvm远程访问Linux环境中tomcat

    jvisualvm 远程访问 Linux ...使用 jvisualvm 远程访问 Linux 环境中的 Tomcat 需要安装和配置 jdk 和 Tomcat,然后使用 jvisualvm 的 JMX 方法或 jstatd 方法进行监控,最后添加 Visual GC 插件以获取更多的监控信息。

    zabbix监控Nginx/Tomcat/MySQL

    当JMX图标变为绿色,表明Tomcat监控配置成功。 对于MySQL的监控,你需要在B机器上创建一个特定的Zabbix Agent配置文件`userparameter_mysql.conf`,并在其中定义监控MySQL的参数。接着,通过MySQL客户端创建一个...

    jmxtools-1.2.1.jar+jmxri-1.2.1.jar.zip

    这个库通常用于开发远程监控和管理应用,或者在客户端进行JMX连接。 `jmxri-1.2.1.jar` 是JMX运行时实现(Runtime Implementation)的组件,它提供了Java虚拟机内部的MBean服务器实现。当JMX API在Java应用程序中...

    Zabbix通过JMX方式监控java中间件

    - **配置Tomcat监控**:对于Tomcat这类Java应用,还需要下载JMX-Remote.jar并放置在Tomcat的lib目录下。 #### 四、实践操作指南 1. **安装准备**: - 确认服务器已安装JDK。 - 下载并解压Zabbix软件包。 - ...

    zabbix监控tomcat模版及jar包

    1. **启用JMX**:在Tomcat的`conf/server.xml`配置文件中,我们需要添加JMX远程访问的配置。这通常意味着在`&lt;Server&gt;`标签内添加`&lt;Service&gt;`和`&lt;Connector&gt;`,并设置相应的端口和访问权限。 2. **安装JMX连接器**:...

    tomcat开启远程jmx连接方式

    **Tomcat开启远程JMX连接方式详解** Java Management Extensions (JMX) 是Java...通过JMX,你可以使用各种工具(如JConsole、VisualVM、JMX Console插件等)进行远程监控,以便更好地管理和优化Tomcat服务器的性能。

    tomcat 远程监控 ,jmx连接工具

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

    java/myeclipse/linux/tomcat整理的一些资料

    同时,掌握Tomcat的监控工具,如catalina.sh脚本和JMX(Java Management Extensions)。 这些资料将涵盖从编写Java代码、集成开发环境的使用,到服务器配置和应用部署的全过程。通过深入学习和实践,你可以成为一名...

Global site tag (gtag.js) - Google Analytics