`

jmx测试

    博客分类:
  • jmx
jmx 
阅读更多
import java.lang.management.MemoryUsage;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanServerConnection;
import javax.management.ObjectInstance;
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 JMXTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {

		   String jmxURL = "service:jmx:rmi:///jndi/rmi://127.0.0.1:6901/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();
           
           //端口最好是动态取得
           ObjectName threadObjName = new ObjectName("Catalina:type=ThreadPool,name=http-80");
           MBeanInfo mbInfo = mbsc.getMBeanInfo(threadObjName);
           
           String attrName = "currentThreadCount";//tomcat的线程数对应的属性值
           MBeanAttributeInfo[] mbAttributes = mbInfo.getAttributes();
           System.out.println("currentThreadCount:"+mbsc.getAttribute(threadObjName, attrName));
           
           //heap
           for(int j=0;j <mbsc.getDomains().length;j++){ 
        	   System.out.println("###########"+mbsc.getDomains()[j]); 
           } 
           Set MBeanset = mbsc.queryMBeans(null, null);
           System.out.println("MBeanset.size() : " + MBeanset.size());
           Iterator 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 (canonicalName.equals("Catalina:host=localhost,type=Cluster"))      {  
        		   // Get details of cluster MBeans
        		   System.out.println("Cluster MBeans Details:");
        		   System.out.println("========================================="); 
        		   //getMBeansDetails(canonicalName);
        	   	  String canonicalKeyPropList = objectName.getCanonicalKeyPropertyListString();
        	  }
           }
           //------------------------- system ----------------------
           ObjectName runtimeObjName = new ObjectName("java.lang:type=Runtime");
           System.out.println("厂商:"+ (String)mbsc.getAttribute(runtimeObjName, "VmVendor"));
           System.out.println("程序:"+ (String)mbsc.getAttribute(runtimeObjName, "VmName"));
           System.out.println("版本:"+ (String)mbsc.getAttribute(runtimeObjName, "VmVersion"));
           Date starttime=new Date((Long)mbsc.getAttribute(runtimeObjName, "StartTime"));
           SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
           System.out.println("启动时间:"+df.format(starttime));
           
           Long timespan=(Long)mbsc.getAttribute(runtimeObjName, "Uptime");
           System.out.println("连续工作时间:"+JMXTest.formatTimeSpan(timespan));
           //------------------------ 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("path"));
        	   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"));
           }
        	   
		} catch (Exception e) {
            e.printStackTrace();
        }
	}

	public static String formatTimeSpan(long span){
		long minseconds = span % 1000;
		
		span = span /1000;
		long seconds = span % 60;
		
		span = span / 60;
		long mins = span % 60;
		
		span = span / 60;
		long hours = span % 24;

		span = span / 24;
		long days = span;
		return (new Formatter()).format("%1$d天 %2$02d:%3$02d:%4$02d.%5$03d", days,hours,mins,seconds,minseconds).toString();
	}
}

 

分享到:
评论

相关推荐

    jmx测试包用于检查zabbix的监控项是否正常

    标题中的"jmx测试包用于检查zabbix的监控项是否正常",意味着这个测试包是为了解决一个特定的问题:确保Zabbix通过JMX接口正确地收集和显示了目标系统的监控数据。Zabbix是一款开源的网络监控工具,它可以监控各种...

    jmx监控tomcat测试包

    catalina-jmx-remote.jar放到tomcat/lib目录下 如果是windows版本,编辑TOMCAT_HOME/bin/catalina.bat,在开头加入下面几行: set CATALINA_OPTS=%CATALINA_OPTS% -Djava.rmi.server.hostname=JMX_HOST set CATALINA...

    基于Java语言的JMeter性能测试设计源码及跨平台开发工具

    该源码包包含3046个文件,涵盖1388个Java源文件、730个PNG图片、220个属性文件、109个JMX测试脚本、45个CSV数据文件、43个Groovy脚本、36个JavaScript和HTML文件,以及少量其他类型的文件,如Kotlin、Shell和CSS。...

    ant +jmeter 生成测试报告.docx

    在 JMeter 的根目录下创建一个名为 `TestCase` 的文件夹,将所有的 JMX 测试用例放入该目录。这些 JMX 文件包含了你的测试计划和设置。在 `build.xml` 文件中,你需要定义 Ant 任务来执行 JMeter 测试,并指定 JMX ...

    jmeter做的http并发测试完整例子(包含完整可执行脚本http_sample.jmx)

    压缩包里有:http_sample.jmx,JMeterPlugins-Extras.jar,JMeterPlugins-Standard.jar,ServerAgent-2.2.1.zip 1:安装Java8环境 2:安装apache-jmeter-3.1 ...5:启动Jmeter,修改jmx的配置,运行脚本。

    Jmeter+ant+jenkins环境配置,实现性能测试持续集成和交互

    保存JMX测试计划到指定的JMeterTest目录。 在CMD中,进入Ant的安装目录,运行`ant`命令,Ant会根据`build.xml`执行JMeter测试,生成JTL结果文件。JTL文件记录了性能测试的详细数据,可以进一步分析。 Jenkins是一...

    更简单的jmeter(非GUI模式)easy-jmeter-master.zip

    在实际操作中,你可能需要创建一个JMX测试计划文件,这个文件包含了你的测试逻辑,如线程组、采样器、监听器等元素。例如,你可以设置一个HTTP请求采样器来模拟用户对Web应用的访问,或者添加CSV Data Set Config来...

    Linux服务器上部署Jmeter-教程~

    6. **上传JMX测试脚本**:将JMX测试脚本通过FTP或其他文件传输方式上传到服务器的脚本存放目录。 7. **运行JMX脚本**:使用以下命令在非GUI模式下运行JMeter测试: ```bash jmeter -n -t $JMETER_HOME/workspace/...

    性能测试.jmx

    性能测试.jmx

    分布式测试.jmx

    分布式测试.jmx

    JMeter自动化接口测试环境安装说明 .docx

    2. **使用版本控制**:将JMX测试计划文件纳入版本控制系统,便于团队协作。 3. **性能调优**:根据硬件资源和测试需求调整JMeter的线程数、循环次数等参数。 4. **错误处理**:对错误进行捕获和处理,确保测试过程...

    springcloud混沌测试-demo.jmx

    springcloud混沌测试-demo.jmx

    jmeter 命令行运行解析插件

    其中,`-n`表示非GUI模式,`-t`指定要运行的JMX测试计划文件,`-l`用于指定结果文件,`-j`则用于记录JMeter的运行日志。这种方式可以避免GUI对系统资源的影响,特别是在大量并发测试时。 接下来,我们来看插件的...

    Jmeter的接口性能测试Demo.jmx

    使用Jmeter做接口性能测试的一个简易Demo

    apache-jmeter-5.1.1.rar

    6. `bin/test计划`:示例的JMX测试计划文件,用于演示JMeter的功能和用法。 在使用JMeter时,首先需要启动JMeter主程序,然后创建一个测试计划。测试计划定义了要测试的目标、测试的逻辑控制器、采样器(如HTTP请求...

    JMX 在GlassFish中的应用

    4. **测试MBean**:使用JConsole或其他JMX兼容的工具来测试MBean的正确性和可用性。 #### 结论 JMX在GlassFish中的应用不仅展示了Java生态系统中强大的管理和监控能力,也体现了开源软件社区对于提高应用可管理性...

    JMETER 主界面工具栏介绍

    - **打开(Open)**: 用于加载先前保存的 JMX 测试计划文件,这些文件包含了所有测试的配置和设置。 - **关闭(Close)**: 关闭当前正在编辑的测试计划,返回到初始界面。 - **模板(Template)**: 创建预定义的...

    Jmeter测试中间件样例.jmx

    Jmeter测试中间件样例.jmx demo

    jmeter-5.0 免安装版

    6. **JMX文件格式的改进**:JMX测试计划文件格式进行了升级,使得测试计划的结构更清晰,易于维护。 7. **API和插件支持**:JMeter 5.0 支持更多的第三方插件和API,允许开发人员扩展其功能以满足特定需求。 8. **...

    spring框架下jmx入门例子

    在"test"目录下,可能包含了一些测试用例,用于验证JMX配置是否正确,以及MBean的操作是否符合预期。这些测试可能使用了Spring的`MBeanServerFactoryBean`来获取MBeanServer实例,然后调用`getAttribute`和`...

Global site tag (gtag.js) - Google Analytics