能否通过JMeter Java API使用Perfmon采集服务器性能?
使用JMeter Java API结合Perfmon插件监控服务器性能
嘿,我之前刚好折腾过用JMeter Java API搭配Perfmon插件做服务器监控,给你梳理下具体的步骤和代码示例,应该能帮到你:
前置准备
首先得确保你的项目依赖里包含了JMeter核心库和Perfmon插件的jar包,如果用Maven的话,pom.xml里要加这些依赖(注意版本尽量和你用的JMeter版本匹配):
<dependencies> <!-- JMeter Core --> <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_core</artifactId> <version>5.6.3</version> <scope>provided</scope> </dependency> <!-- Perfmon Plugin --> <dependency> <groupId>kg.apc</groupId> <artifactId>jmeter-plugins-perfmon</artifactId> <version>2.13</version> </dependency> <!-- 其他必要依赖比如JMeter Java请求等,按需添加 --> </dependencies>
另外,必须在你要监控的目标服务器上运行Perfmon的ServerAgent,这个Agent是用来收集服务器性能数据的,默认监听4444端口,启动命令就是./startAgent.sh(Linux)或者startAgent.bat(Windows)。
代码实现步骤
1. 初始化JMeter测试基础组件
先创建测试计划、线程组这些基础结构:
import org.apache.jmeter.engine.StandardJMeterEngine; import org.apache.jmeter.reporters.ResultCollector; import org.apache.jmeter.reporters.Summariser; import org.apache.jmeter.testelement.TestPlan; import org.apache.jmeter.threads.ThreadGroup; import org.apache.jmeter.util.JMeterUtils; import org.apache.jorphan.collections.HashTree; // 初始化JMeter配置 JMeterUtils.loadJMeterProperties("path/to/jmeter.properties"); JMeterUtils.setJMeterHome("path/to/your/jmeter/home"); JMeterUtils.initLocale(); StandardJMeterEngine jmeter = new StandardJMeterEngine(); HashTree testPlanTree = new HashTree(); // 创建测试计划 TestPlan testPlan = new TestPlan("Perfmon监控测试计划"); testPlanTree.add(testPlan); // 创建线程组 ThreadGroup threadGroup = new ThreadGroup(); threadGroup.setName("测试线程组"); threadGroup.setNumThreads(1); threadGroup.setRampUp(1); threadGroup.setSamplerController(null); HashTree threadGroupTree = testPlanTree.add(testPlan, threadGroup);
2. 添加Perfmon Metrics Collector元件
这个元件是用来连接目标服务器的ServerAgent并收集性能数据的:
import kg.apc.jmeter.perfmon.PerfmonMetricsCollector; import kg.apc.jmeter.perfmon.PerfmonMetricConfig; // 创建Perfmon收集器 PerfmonMetricsCollector perfmonCollector = new PerfmonMetricsCollector(); perfmonCollector.setName("Perfmon服务器监控"); // 设置目标服务器地址和Agent端口 perfmonCollector.setHost("目标服务器IP"); perfmonCollector.setPort("4444"); // 添加要监控的指标,比如CPU、内存、磁盘IO // CPU监控 PerfmonMetricConfig cpuConfig = new PerfmonMetricConfig(); cpuConfig.setMetric("CPU"); cpuConfig.setType("org.apache.jmeter.perfmon.CPUCollector"); perfmonCollector.addMetricConfig(cpuConfig); // 内存监控 PerfmonMetricConfig memoryConfig = new PerfmonMetricConfig(); memoryConfig.setMetric("Memory"); memoryConfig.setType("org.apache.jmeter.perfmon.MemoryCollector"); perfmonCollector.addMetricConfig(memoryConfig); // 磁盘IO监控(可选) PerfmonMetricConfig diskConfig = new PerfmonMetricConfig(); diskConfig.setMetric("DiskIO"); diskConfig.setType("org.apache.jmeter.perfmon.DiskIOCollector"); perfmonCollector.addMetricConfig(diskConfig); // 将Perfmon收集器添加到线程组下 threadGroupTree.add(perfmonCollector);
3. 添加结果收集器(可选)
如果你需要把监控数据保存到文件或者在代码里处理,可以添加ResultCollector:
// 创建结果收集器,保存监控数据到CSV ResultCollector resultCollector = new ResultCollector(new Summariser("summary")); resultCollector.setFilename("perfmon_results.csv"); threadGroupTree.add(resultCollector);
4. 运行测试并获取数据
最后启动JMeter引擎,运行测试,之后你可以读取CSV文件里的监控数据,或者通过代码直接处理收集到的指标:
// 配置并启动JMeter引擎 jmeter.configure(testPlanTree); jmeter.run(); // 测试结束后,你可以读取perfmon_results.csv文件,里面包含了时间戳、CPU使用率、内存使用率等数据 // 或者通过自定义监听器来实时处理数据(需要继承ResultCollector类)
注意事项
- 确保目标服务器的ServerAgent已经启动,并且防火墙开放了对应的端口(默认4444)
- Perfmon插件的版本要和JMeter版本兼容,避免出现类找不到的问题
- 如果需要监控多个服务器,可以创建多个PerfmonMetricsCollector实例,分别设置不同的服务器地址
- 监控数据的采样间隔可以通过PerfmonMetricsCollector的
setInterval()方法设置,单位是毫秒,默认是1000ms
内容的提问来源于stack exchange,提问作者Ras
相关产品推荐
相关产品推荐

