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的监控项是否正常",意味着这个测试包是为了解决一个特定的问题:确保Zabbix通过JMX接口正确地收集和显示了目标系统的监控数据。Zabbix是一款开源的网络监控工具,它可以监控各种...
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...
在 JMeter 的根目录下创建一个名为 `TestCase` 的文件夹,将所有的 JMX 测试用例放入该目录。这些 JMX 文件包含了你的测试计划和设置。在 `build.xml` 文件中,你需要定义 Ant 任务来执行 JMeter 测试,并指定 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的配置,运行脚本。
保存JMX测试计划到指定的JMeterTest目录。 在CMD中,进入Ant的安装目录,运行`ant`命令,Ant会根据`build.xml`执行JMeter测试,生成JTL结果文件。JTL文件记录了性能测试的详细数据,可以进一步分析。 Jenkins是一...
在实际操作中,你可能需要创建一个JMX测试计划文件,这个文件包含了你的测试逻辑,如线程组、采样器、监听器等元素。例如,你可以设置一个HTTP请求采样器来模拟用户对Web应用的访问,或者添加CSV Data Set Config来...
6. **上传JMX测试脚本**:将JMX测试脚本通过FTP或其他文件传输方式上传到服务器的脚本存放目录。 7. **运行JMX脚本**:使用以下命令在非GUI模式下运行JMeter测试: ```bash jmeter -n -t $JMETER_HOME/workspace/...
性能测试.jmx
分布式测试.jmx
2. **使用版本控制**:将JMX测试计划文件纳入版本控制系统,便于团队协作。 3. **性能调优**:根据硬件资源和测试需求调整JMeter的线程数、循环次数等参数。 4. **错误处理**:对错误进行捕获和处理,确保测试过程...
springcloud混沌测试-demo.jmx
其中,`-n`表示非GUI模式,`-t`指定要运行的JMX测试计划文件,`-l`用于指定结果文件,`-j`则用于记录JMeter的运行日志。这种方式可以避免GUI对系统资源的影响,特别是在大量并发测试时。 接下来,我们来看插件的...
使用Jmeter做接口性能测试的一个简易Demo
6. `bin/test计划`:示例的JMX测试计划文件,用于演示JMeter的功能和用法。 在使用JMeter时,首先需要启动JMeter主程序,然后创建一个测试计划。测试计划定义了要测试的目标、测试的逻辑控制器、采样器(如HTTP请求...
4. **测试MBean**:使用JConsole或其他JMX兼容的工具来测试MBean的正确性和可用性。 #### 结论 JMX在GlassFish中的应用不仅展示了Java生态系统中强大的管理和监控能力,也体现了开源软件社区对于提高应用可管理性...
- **打开(Open)**: 用于加载先前保存的 JMX 测试计划文件,这些文件包含了所有测试的配置和设置。 - **关闭(Close)**: 关闭当前正在编辑的测试计划,返回到初始界面。 - **模板(Template)**: 创建预定义的...
Jmeter测试中间件样例.jmx demo
6. **JMX文件格式的改进**:JMX测试计划文件格式进行了升级,使得测试计划的结构更清晰,易于维护。 7. **API和插件支持**:JMeter 5.0 支持更多的第三方插件和API,允许开发人员扩展其功能以满足特定需求。 8. **...
在"test"目录下,可能包含了一些测试用例,用于验证JMX配置是否正确,以及MBean的操作是否符合预期。这些测试可能使用了Spring的`MBeanServerFactoryBean`来获取MBeanServer实例,然后调用`getAttribute`和`...
使用JDK自带的jconsole插件,我们可以连接到tomcat,测试jmx远程监控是否成功。如果连接不成功,请检查Linux环境下/etc/hosts文件,将内的IP更改为Linux主机的IP,然后保存,重启机器,再次启动tomcat,使用jconsole...