前言:

最近公司接了一个云上展会项目,合同里签订的是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:

locust -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 --worker

这里的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感觉太重了。

文末送上loadrunner11的安装包下载地址和破解dll和证书id。

用迅雷下载:http://www.genilogix.com/downloads/loadrunner/loadrunner-11.iso

破解文件:https://download.csdn.net/download/tengdakuaijie1/12880665

有问题的欢迎交流。

Locust QQ 群:

Locust、Jemter、Loadrunner三种工具的分布式压测的更多相关文章

  1. Loadrunner三种post格式的请求

    Loadrunner三种post格式的请求 web_custom_request intweb_custom_request(const char *RequestName, <List of ...

  2. jemter 分布式压测

    1.测试机搭建 首选 压力机A,压力机B,压力机C, 压力机A作为控制台 压力机B,压力机C作为分布式的测试机 压力机Aip:172.16.23.69, 压力机Bip:192.168.184.128 ...

  3. 案例 | 荔枝微课基于 kubernetes 搭建分布式压测系统

    王诚强,荔枝微课基础架构负责人.热衷于基础技术研发推广,致力于提供稳定高效的基础架构,推进了荔枝微课集群化从0到1的发展,云原生架构持续演进的实践者. 本文根据2021年4月10日深圳站举办的[腾讯云 ...

  4. jmeter(二十七)分布式压测注意事项

    之前的博客:jemter(二十三):分布式测试简略的介绍了利用jmeter做分布式测试的方法,当时只是介绍了背景和原因,以及基本的配置操作,有同学说写得不够详细. 正好今年双十一,我司的全链路压测,也 ...

  5. JMeter分布式压测实战(2020年清明假期学习笔记)

    一.常用压力测试工具对比 简介:目前用的常用测试工具对比 1.loadrunner 性能稳定,压测结果及颗粒度大,可以自定义脚本进行压测,但是太过于重大,功能比较繁多. 2.Apache ab(单接口 ...

  6. 分布式压测系列之Jmeter4.0第一季

    1)Jmeter4.0介绍 jmeter是个纯java编写的开源压测工具,apache旗下的开源软件,一开始是设计为web测试的软件,由于发展迅猛,现在可以压测许多协议比如:http.https.so ...

  7. 实现理论上无tps上限的分布式压测(基于Jmeter+InfluxDB+Grafana+Spring Boot)

    JMeter自身带有Master-Slave压测框架,对于并发量不是很高的压力情况下(比如tps低于5000),该方案是可行的,并且使用起来非常方便,只要在配置文件或者命令行工具的参数做一些补充,即可 ...

  8. jmeter进行分布式压测过程与 注意事项

    jmeter命令行运行但是是单节点下的, jmeter底层用java开发,耗内存.cpu,如果项目要求大并发去压测服务端的话,jmeter单节点难以完成大并发的请求,这时就需要对jmeter进行分布式 ...

  9. jmeter分布式压测

    stop.sh需要跑Jmeter的服务器上安装Jmeteryum install lrzsz 安装rz.sz命令rz jemter的压缩包 拷贝到/usr/local/tools下面unzip apa ...

  10. JMeter在linux上分布式压测步骤(二)

    哈喽,我又来了~ 前提:三台linux虚拟机,一台作为master,另外两台作为slave. 一.server端 1.修改1099端口,client和server通信的端口,可以不修改,默认就是109 ...

随机推荐

  1. GaussDB(DWS)集群通信:详解pooler连接池

    本文分享自华为云社区<GaussDB(DWS) 集群通信系列一:pooler连接池>,作者:半岛里有个小铁盒. 1.前言 适用版本:[8.1.0(及以上)] GaussDB(DWS) 为M ...

  2. OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像

    前言   通过相机图片可以识别出棋盘角点了,这时候我们需要通过角点去计算相机内参矩阵,通过上篇得知畸变的原理,所以我们尽可能要全方位都能获取标定图片,全方位意思是提供的多张图综合起来基本覆盖了相机所有 ...

  3. evalFn 字符串转执行函数 附带JSONParse函数

    const evalFn = (fn) => { var Fun = Function // 一个变量指向Function,防止前端编译工具报错 return new Fun('return ' ...

  4. end_of_line = lf 选择行尾序列 .editorconfig - 老项目不动代码存盘 文件变动 CRLF 的问题 vscode

    end_of_line = lf 选择行尾序列 .editorconfig - 老项目不动代码存盘 文件变动 CRLF 的问题 缘由 vscode 老项目代码,没有变动,ctrl + s后 文件有变化 ...

  5. 流数据库-RisingWave

    参考: https://docs.risingwave.com/docs/current/architecture/ https://www.risingwavetutorial.com/docs/i ...

  6. day06-Java流程控制

    Java流程控制 1.用户交互Scanner java.util.Scanner是Java5的新特征,我们可以通过Scannner类来获取用户的输入. 基本语法: Scanner s = new Sc ...

  7. [mysql/docker] 基于Docker安装MYSQL

    0 序 虽然关于 mysql 安装的教程,先前已写过很多期了(参见如下列表),但这期的安装教程所依赖的环境还是大有不同的----基于 docker 环境. [数据库] MySQL之数据库备份与升级:M ...

  8. JAVA 相关

    1.  google guava  cache 2. presto 3. loadingcache 4. aspect

  9. Android组件化开发实践和案例分享

    目录介绍 1.为什么要组件化 1.1 为什么要组件化 1.2 现阶段遇到的问题 2.组件化的概念 2.1 什么是组件化 2.2 区分模块化与组件化 2.3 组件化优势好处 2.4 区分组件化和插件化 ...

  10. 三维模型3DTile格式轻量化在数据存储的重要性分析

    三维模型3DTile格式轻量化在数据存储的重要性分析 三维模型3DTile格式轻量化在数据存储中占有重要地位.随着科技的不断发展,尤其是空间信息科技的进步,人们对于三维地理空间数据的需求日益增长.然而 ...