JMeter JMXMon插件监控JVM
一、 添加JMXMon插件
1.下载JMXMon插件
访问网址:http://www.jmeter-plugins.org/
方法一:下载jmeter-plugins-manager-0.11.jar(目前版本为0.11),放到jmeter/lib/ext目录下,重启启动jmeter后可以在Options->Plugins Manager的Availab Plugins中勾选下载JMXMon Sample Collector:
方法二:点击Documentation->JMXMon Sample Collector,点击Download下载JMXMon的jar包,放到jmeter的lib/ext文件夹下:
二、 配置JVM监控
1.配置JVM监控参数
在被测Java应用上增加Java参数:-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=1099
一般Java参数在/etc/profile中间中定义,如:
因此只需将上面开启jmx监控的参数添加在这里即可,保存后执行source /etc/profile以即时生效,重启待测Java程序后执行netstat -antp|grep 1099,可以看到端口已经开放(本截图中1099端口已经连接),且就是待测Java程序启动的:
2.添加JMXMon监控
在jmeter里添加listener->jp@gc – JMXMon Samples Collector,点击“Add Row”按钮可以添加JVM的监控:
l Label:填写监控图表里的曲线名称。
l URL:填写被测JVM的JMX连接地址,一般格式为service:jmx:rmi:///jndi/rmi://YOURHOST:6969/jmxrmi或者service:jmx:rmi://YOURHOST:JMXPORT/jndi/rmi://YOURHOST:JMXPORT/jmxrmi
l Object Name:填写监控的具体对象名称。
l Attribute:填写监控的具体属性。
l Key:如果是复杂类型的属性,还需要填写Key。
l Delta:未找到解释,需要查看JMXMon源码。
l Retry:测试过程中连接断开后是否重连。
Object Name等参数的填写需要结合jconsole来确定,举例来说:
jmeter监控服务器10.104.90.204上的一个tomcat上运行的程序,URL中填写:service:jmx:rmi:///jndi/rmi://10.104.90.204:1099/jmxrmi
如果希望监控JVM Heap大小,则启动jconsole连接到这个tomcat上:
切换到MBean页签,展开java.lang,选中Memory,将右侧的ObjectName填写到JMXMon的Object Name中:
选中下面的“属性”,右侧包括需要监控的HeapMemoryUsage属性,HeapMemoryUsage填写到JMXMon的Attribute中:
HeapMemoryUsage属于复杂类型的属性,因此它的值不是一个数值,双击它的值可以展开显示,used填到JMXMon的Key中:
JMXMon添加的监控如下:
一般常用的监控如下:
Lable: HeapMemoryUsage-Used
Object Name: java.lang:type=Memory
Attribute: HeapMemoryUsage
Key: used
Lable: NonHeapMemoryUsage-Used
Object Name: java.lang:type=Memory
Attribute: NonHeapMemoryUsage
Key: used
Lable: CMS Old Gen-Usage
Object Name: java.lang:type=MemoryPool,name=CMS Old Gen
Attribute: Usage
Key: used
Lable: CMS Perm Gen-Usage
Object Name: java.lang:type=MemoryPool,name=CMS Perm Gen
Attribute: Usage
Key: used
Lable: Par Eden Space-Usage
Object Name: java.lang:type=MemoryPool,name=Par Eden Space
Attribute: Usage
Key: used
Lable: Par Survivor Space-Usage
Object Name: java.lang:type=MemoryPool,name=Par Survivor Space
Attribute: Usage
Key: used
Lable: ConcurrentMarkSweep-CollectionCount
Object Name: java.lang:type=GarbageCollector,name=ConcurrentMarkSweep
Attribute: CollectionCount
Lable: ParNew-CollectionCount
Object Name: java.lang:type=java.lang:type=GarbageCollector,name=ParNew
Attribute: CollectionCount
Lable: Threading-ThreadCount
Object Name: jjava.lang:type=Threading
Attribute: ThreadCount
3.执行JMXMon监控
GUI下执行测试场景后JMXMon里添加的jmx监控指标就会实时显示:
如果在non-GUI模式下需要在JMXMon插件中指定保存结果文件,不能通过-l参数生成结果文件,-l生成的结果文件中不包含插件里添加的采集结果。结果保存的文件名可以做参数化,例如:JMXMon_test_${__time(yyyy-MM-dd HH:mm,)}.jtl,可根据测试执行的年月日时分自动生成结果文件。