什么是分布式压测
-
普通压测:单台机可以对目标机器产生的压力比较小,受限因素包括CPU,网络,IO等
-
分布式压测:利用多台机器向目标机器产生压力,模拟几万用户并发访问
Jmeter分布式压测原理
- 总控机器的节点master,其他产生压力的机器叫“肉鸡” server
- master会把压测脚本发送到 server上面
- 执行的时候,server上只需要把jmeter-server打开就可以了,不用启动jmeter
- 结束后,server会把压测数据回传给master,然后master汇总输出报告
- 配置详情
阿里云Linux服务器压测接口实战
SpringBoot 接口打包,并用jar包方式部署
在cmd项目根目录打包:mvn package && java -jar target/gs-spring-boot-0.1.0.jar
部署java项目到阿里云服务器和守护进程讲解
- 关闭防火墙:阿里云控制台安全策略,开放端口
- linux上运行 java -jar xxxx
- 守护进程:nohup java -jar xxxxx &
- ssh root@120.79.160.143
阿里云Linux服务器安装Jmeter 4.0
- 经济足够:购买两台阿里云机器
- 不足:本地虚拟机,或者用你室友的电脑,在同个局域网就可以,安装同个版本的jdk,jmeter,同个路径,不要带有空格或者中文
- 新建目录jmeter,下载地址:wget http://apache.osuosl.org//jmeter/binaries/apache-jmeter-4.0.tgz
Jmeter非GUI界面 参数讲解
压测命令示例:jmeter的bin目录下执行下面命令进行压测
- jmeter -n -t linux_users_api.jmx -l result.jtl -e -o /usr/local/softwate/jmeter/temp/ResultReport
- jmeter -n -t /Users/jack/Desktop/linux_users_api.jmx -l result.jtl -e -o /Users/jack/Desktop/person/jmeter/temp
参数讲解:
- -h 帮助
- -n 非GUI模式
- -t 指定要运行的 JMeter 测试脚本文件
- -l 记录结果的文件 每次运行之前,(要确保之前没有运行过,即xxx.jtl不存在,不然报错)
- -r Jmter.properties文件中指定的所有远程服务器
- -e 在脚本运行结束后生成html报告
- -o 用于存放html报告的目录(目录要为空,不然报错)
官方配置文件地址 http://jmeter.apache.org/usermanual/get-started.html
在阿里云服务器上以非GUI界面去执行JMX压测脚本
jmx目录:/usr/local/software/jmeter/temp,在本地用界面化生成JMX脚本,给权限:chmod 777 user.jmx
jmeter -n -t /usr/local/software/jmeter/temp/linux_users_api.jmx -l /usr/local/software/jmeter/temp/jtl/result.jtl
阿里云Linux服务器 Jmeter压测实战之jtl文件生成和查看
- 利用软件从阿里云Centos服务器下载压测报告
- 可以通过打开jmeter,新建线程组->summary report->浏览文件 进行查看
Jmeter压测接口的性能优化
- Jmeter压测减少资源使用的一些建议,即压测结果更准确
- 使用非GUI模式:jmeter -n -t test.jmx -l result.jtl
- 少使用Listener, 如果使用-l参数,它们都可以被删除或禁用。
- 在加载测试期间不要使用“查看结果树”或“查看结果”表监听器,只能在脚本阶段使用它们来调试脚本。
- 包含控制器在这里没有帮助,因为它将文件中的所有测试元素添加到测试计划中。]
- 不要使用功能模式,使用CSV输出而不是XML
- 只保存你需要的数据,尽可能少地使用断言
- 如果测试需要大量数据,可以提前准备好测试数据放到数据文件中,以CSV Read方式读取。
- 用内网压测,减少其他带宽影响压测结果
- 如果压测大流量,尽量用多几个节点以非GUI模式向服务器施压
官方推荐 :http://jakarta.apache.org/jmeter/usermanual/best-practices.html#lean_mean
把Jmtere压测结果转换为Html
指令:jmeter -n -t /usr/local/software/jmeter/temp/linux_users_api.jmx -l /usr/local/software/jmeter/temp/jtl/result.jtl -e -o /usr/local/software/jmeter/temp/result
压测报告 html里面Dashboard的核心指标
1)Test and Report informations
- Source file:jtl文件名
- Start Time :压测开始时间
- End Time :压测结束时间
- Filter for display:过滤器
- Lable:sampler采样器名称
2)APDEX(Application performance Index)
- apdex:应用程序性能指标,范围在0~1之间,1表示达到所有用户均满意
- T(Toleration threshold):可接受阀值
- F(Frustration threshold):失败阀值
3)Requests Summary
- OK:成功率
- KO:失败率
4)Statistics 统计数据
- lable:sampler采样器名称
- samples:请求总数,并发数*循环次数
- KO:失败次数
- Error%:失败率
- Average:平均响应时间
- Min:最小响应时间
- Max:最大响应时间
- 90th pct: 90%的用户响应时间不会超过这个值(关注这个就可以了)
- 2ms,3ms,4,5,2,6,8,3,9
- 95th pct: 95%的用户响应时间不会超过这个值
- 99th pct: 99%的用户响应时间不会超过这个值 (存在极端值)
- throughtput:Request per Second吞吐量 qps
- received:每秒从服务器接收的数据量
- send:每秒发送的数据量
压测报告 html里面Charts的核心指标
1)Over Time(随着时间的变化)
- Response Times Over Time:响应时间变化趋势
- Response Time Percentiles Over Time (successful responses):最大,最小,平均,用户响应时间分布
- Active Threads Over Time:并发用户数趋势
- Bytes Throughput Over Time:每秒接收和请求字节数变化,蓝色表示发送,黄色表示接受
- Latencies Over Time:平均响应延时趋势
- Connect Time Over Time :连接耗时趋势
2)Throughput
- Hits Per Second (excluding embedded resources):每秒点击次数
- Codes Per Second (excluding embedded resources):每秒状态码数量
- Transactions Per Second:即TPS,每秒事务数
- Response Time Vs Request:响应时间和请求数对比
- Latency Vs Request:延迟时间和请求数对比
3)Response Times
- Response Time Percentiles:响应时间百分比
- Response Time Overview:响应时间概述
- Time Vs Threads:活跃线程数和响应时间
- Response Time Distribution:响应时间分布图