因为jmeter本身的性能问题,有时候为了尽量模拟业务场景,需要模拟大量的并发请求,此时单台压力机就显得力不从心。针对这个情况,jmeter的解决方案是支持分布式压测,即将大量的模拟并发分配给多台压力机,来满足大流量的并发请求场景。jmeter分布式测试的原理示意简单如下。
分布式测试中,选择一台作为管理机(Jmeter Server),其他的机器作为测试负载机(Agent);执行测试时,由管理机通过命令行将测试脚本发给负载机,然后执行测试(不需要启动GUI),测试完成,可以在管理机上的监听器里面看到负载机发来的测试结果,结果为多个负载机测试结果汇总而成。jmeter分布式测试具体操作如下。
一、准备工作
1、确保管理机和负载机在同一个网段,且开通防火墙。
2、确保管理机和负载机均安装同一版本的JDK及jmeter,且jmeter都能正常启动。
3、如果负载机是Linux系统,确保当前登录用户拥有jmeter和jmeter-server文件的操作权限
4、禁用管理机和负载机上jmeter ssl连接,meter.properties文件中修改配置。
5、Linux负载机需要修改jmeter-server文件中RMI_HOST_DEF=-Djava.rmi.server.hostname配置,将地址改为负载机地址,否则负载机启动jmeter-server会报错。
二、在管理机上添加负载机
通过修改管理机上jmeter的配置文件jmeter.properties来实现添加负载机。
初始配置如下:
根据需要添加remote_hosts,即添加负载机IP,如果有多个负载机IP用英文逗号分隔。添加后为:
三、启动负载机服务
如果是Windows负载机,直接点击负载机上jmeter-server.bat启动服务,如果是Linux负载机,./jmeter-server命令直接启动服务,启动成功后会打印如下类似日志;如果以后台服务的形式启动负载机上的jemter-server,可以用命令 nohup sh jmeter-server &。
四、控制机上运行测试
可根据需要在GUI或NGUI模式下运行脚本,运行脚本时,负载机也会打印相应日志。
五、常见问题
1、启动负载机服务报错如下
此报错是没有修改jmeter-server文件RMI_HOST_DEF=-Djava.rmi.server.hostname配置,将地址改为负载机地址即可
此报错是没有禁用管理机和负载机上jmeter ssl连接,禁用解决问题。
2、GUI模式下运行脚本后,管理机察看结果树中的响应数据项为空白,此时则需要打开管理机jmeter.properties文件,将如下配置的注释去掉,重启管理机。
3、如果测试数据有用到CSV或者其他方式进行参数化,需要将data pools在每台负载机上复制一份,且读取路径必须保持一致。如果控制机和负载机的系统类型不一致:则可以使用相对路径。对于控制机而言:当前路径是脚本所有目录。
对于负载机而言:当前路径是jmeter的bin目录。
4、Jmeter的脚本是分别、独立、同时在每一台负载机上执行。这就意味着,对服务器造成的实际压力会随着负载机的增加而增加。此时服务器实际压力=线程组设计压力×负载机数量,因此脚本中的线程要根据负载机的数据实时调整。