开启tomcat的jmx,以及调用

1.window下找tomcat的bin/catalina.bat
2.在catalina.bat中找:doRun与:doStart,在这两个后面加以下代码:
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port="9004" -Dcom.sun.management.jmxremote.authenticate="false" -Dcom.sun.management.jmxremote.ssl="false"
3.以上代码中的9004端口号可自己任意设置
4.运行tomcat的bin/startup.bat进行启动

ps:启动失败,注意是否环境变量配置完全(参见tomcat环境变量的配置)

以上完成tomcat配置 


一下是JAVA中的调用

String jmxURL = "service:jmx:rmi:///jndi/rmi://localhost:9004/jmxrmi";// tomcat
																				// jmx
																				// url
		JMXServiceURL serviceURL = new JMXServiceURL(jmxURL);
		Map map = new HashMap();
		String[] credentials = new String[] { "monitorRole", "QED" };
		map.put("jmx.remote.credentials", credentials);
		JMXConnector connector = JMXConnectorFactory.connect(serviceURL, map);
		MBeanServerConnection mbsc = connector.getMBeanServerConnection();

		// ------------------------ JVM -------------------------
		// 堆使用率
		ObjectName heapObjName = new ObjectName("java.lang:type=Memory");
		MemoryUsage heapMemoryUsage = MemoryUsage.from((CompositeDataSupport) mbsc.getAttribute(heapObjName, "HeapMemoryUsage"));
		long maxMemory = heapMemoryUsage.getMax();// 堆最大
		long commitMemory = heapMemoryUsage.getCommitted();// 堆当前分配
		long usedMemory = heapMemoryUsage.getUsed();
		System.out.println("heap:" + (double) usedMemory * 100 / commitMemory + "%");// 堆使用率

		MemoryUsage nonheapMemoryUsage = MemoryUsage.from((CompositeDataSupport) mbsc.getAttribute(heapObjName, "NonHeapMemoryUsage"));
		long noncommitMemory = nonheapMemoryUsage.getCommitted();
		long nonusedMemory = heapMemoryUsage.getUsed();
		System.out.println("nonheap:" + (double) nonusedMemory * 100 / noncommitMemory + "%");

		ObjectName permObjName = new ObjectName("java.lang:type=MemoryPool,name=Perm Gen");
		MemoryUsage permGenUsage = MemoryUsage.from((CompositeDataSupport) mbsc.getAttribute(permObjName, "Usage"));
		long committed = permGenUsage.getCommitted();// 持久堆大小
		long used = heapMemoryUsage.getUsed();//
		System.out.println("perm gen:" + (double) used * 100 / committed + "%");// 持久堆使用率


		
		
		
		//-------------------- Session ---------------   
        ObjectName managerObjName = new ObjectName("Catalina:type=Manager,*");  
        Set<ObjectName> s=mbsc.queryNames(managerObjName, null);  
        for (ObjectName obj:s){  
            System.out.println("应用名:"+obj.getKeyProperty("context"));  
            ObjectName objname=new ObjectName(obj.getCanonicalName());  
            System.out.println("最大会话数:"+ mbsc.getAttribute( objname, "maxActiveSessions"));  
            System.out.println("会话数:"+ mbsc.getAttribute( objname, "activeSessions"));  
            System.out.println("活动会话数:"+ mbsc.getAttribute( objname, "sessionCounter"));  
        }  
          
        //----------------- Thread Pool ----------------  
        ObjectName threadpoolObjName = new ObjectName("Catalina:type=ThreadPool,*");  
        Set<ObjectName> s2=mbsc.queryNames(threadpoolObjName, null);  
        for (ObjectName obj:s2){  
            System.out.println("端口名:"+obj.getKeyProperty("name"));  
            ObjectName objname=new ObjectName(obj.getCanonicalName());  
            System.out.println("最大线程数:"+ mbsc.getAttribute( objname, "maxThreads"));  
            System.out.println("当前线程数:"+ mbsc.getAttribute( objname, "currentThreadCount"));  
            System.out.println("繁忙线程数:"+ mbsc.getAttribute( objname, "currentThreadsBusy"));  
        }  

你可能感兴趣的:(tomcat)