前言:
最近公司接了一个云上展会项目,合同里签订的是6w并发连接数和2w QPS的性能指标,还有监理单位,第三方评测单位。
唉,先吐槽一下,有了监理和评测,文档tmd一堆堆,严格按照软件开发来执行,写文档都得累死,对于经常只有概要设计,有时候连概要设计都舍了的研发流程,哈哈 ~慢慢体会!
再加上一点,如果评测单位技术很牛皮,那确实能对项目有所帮助,但评测单位技术不行的话,那简直就是来捣乱,平添很多无用工作。
讲讲并发数的理解:
6w并发,也是无语,签合同时也没想到后续有多麻烦,估计当时没理解透彻并发连接数与连接数的概念。
并发连接数:每时刻连接到服务器的请求数,并没有时间单位,没有秒,毫秒的度量单位。比如6万并发,你服务器无时无刻都有6万请求连接。
所以1000并发连接数,可以有2w多的QPS或TPS。因为QPS或TPS是以秒为单位的,1秒内无时无刻的1000并发请求,就可以完成好几万的请求次数。
到这里,是不是认为6w并发很难完成,确实,到项目初验完成,我们只做了3w的并发,QPS倒可以轻松完成。
➢进入正题:
1 Locust的分布式压测
看过我之前的文章,应该了解,locust的分布式压测其实就是启动命令不同而已,和jemter、loadrunner不同的是,locust的master端不会主动把脚本推送到slave服务器,需要自己把要执行的脚本拷贝到slave服务器上。
针对这点的话,可以在master执行脚本里把远程推送文件与远程执行命令加上,就可以搞定了,不用一台台服务器拷贝,再启动命令。
分布式执行命令:
master:
ocust -f D:\thecover_project\api_locust\locust_view\kbh_api\locust_api\locust_bot_search.py --master --master-bind-port 9800 --headless -u 100 -r 20 --expect-worker 1 -t 2m -s 10 --step-load --step-users 100 --step-time 2m --csv D:\thecover_project\api_locust\resource\csv\locust_bot_search.py0922115120
slave:
locust -f D:\thecover_project\api_locust\locust_view\kbh_api\locust_api\locust_bot_search.py --master-host 10.111.53.123 --master-port 9800 --headless --worke
这里的ip就是master机器的ip(一般都是局域网内网IP)
执行压测的测试机部署图:
上面服务器CPU配置为8核16线程,非16核。一般locust一个CPU线程可以启动一个slave。一台机子可以启动16个,当然,启动12,到15个最好,都启动的话,电脑后边很卡,cpu90%会主动丢失该slave。
执行完成后自动生成报告(之前文章有介绍报告生成)。
通过这样的分布式压测,页面的QPS一般很轻松达到5w左右,接口的看服务器配置和接口业务复杂度,一般也能达到3w的qps。
其实研究透locust后,你会发现命令参数里-U也可以叫做并发数,前提是wait time要设置为0,不设置等待时间(思考时间)。这样才能保证无时无刻发起-U后的用户数。
2 Jemter的分布式压测
jemter的自带有分布式压测:Controller(主控机)、Agent(代理机),我用的是最新版(5.3)版本,分布式配置和4.x略有区别。
在Controller主机上修改jmeter.properties配置文件:
1).找到remote_hosts=,把Agent服务器的ip:端口,维护进去,如:
192.168.0.1:1099,192.168.0.2:1099,102.168.1.3:1099
2).找到server.rmi.ssl.disable=false,修改为
server.rmi.ssl.disable=true
3)找到jmeter.bat,运行启动主控机
在Agent主机上修改jmeter.properties配置文件:
1).找到server.rmi.ssl.disable=false,修改为
server.rmi.ssl.disable=true
2)找到jmeter-server.bat,运行启动代理机
Controller机和Agent机,端口默认是1099,若要修改端口,可以在jmeter.properties找到“server_port=”修改端口即可
最后在Controller机jemter上,“运行”-->"远程启动",一台台启动,也可以"运行"-->"远程启动所有",这样分布式压测就启动ok了,压测脚本会自动推送到Agent服务器上执行,不做其他配置。
3 Loadrunner的分布式压测
Loadrunner的分布式压测最简单了,所有机子安装好Loadrunner后,主控机在run load tests 里点击 load generators里添加负载机的ip即可;
添加完后,选择connect尝试连接,若status状态为ready即认为连接上了,然后你可以灵活配置这些负载机:
在上图的第5列那可以选择具体ip,或者所有ip执行脚本,也可以添加多个脚本,分别在不同的ip上执行,这里都可以灵活配置。
loadrunner的界面操作这些还是很强大的,不愧是性能测试工具里的标杆。但是loadrunner的缺点也很多,比如最大的缺点就是收费,当然,你可以使用破解版,另外就是loadrunner和jemter一样,很耗CPU。
其次就是分析报告生成很慢很慢,如果你压测的数据几亿条,光分析报告生成都需要差不多一个小时。
以上就是目前比较流行的压测工具分布式压测部署配置方法。
总的来说,这几款压测工具都还可以,如果不是被评测公司要求使用loadrunner的话,常规的开源压测工具是首选,loadrunner安装都需要安装大半天,完了还得破解啥的,总之loadrunner感觉太重了。