Jmeter分布式压力测试与优化
Jmeter非GUI界面参数
- -h 帮助
- -n 非GUI模式
- -t 指定要运行的 JMeter 测试脚本文件
- -l 记录结果的文件 每次运行之前,(要确保之前没有运行过,即xxx.jtl不存在,不然报错)
- -r Jmter.properties文件中指定的所有远程服务器
- -e 在脚本运行结束后生成html报告
- -o 用于存放html报告的目录(目录要为空,不然报错)
官方配置文件地址 http://jmeter.apache.org/usermanual/get-started.html
#示例1
jmeter -n -t linux_users_api.jmx -l result.jtl -e -o /usr/local/softwate/jmeter/temp/ResultReport
#示例2
jmeter -n -t /Users/jack/Desktop/linux_users_api.jmx -l result.jtl -e -o /Users/jack/Desktop/person/jmeter/temp
Jmeter图形化HTML压测报告
dashboard表格
Test and Report informations
- Source file:jtl文件名
- Start Time :压测开始时间
- End Time :压测结束时间
- Filter for display:过滤器
- Lable:sampler采样器名称
APDEX(Application performance Index)
- apdex:应用程序性能指标,范围在0~1之间,1表示达到所有用户均满意
- T(Toleration threshold):可接受阀值
- F(Frustration threshold):失败阀值
Requests Summary
- OK:成功率
- KO:失败率
Statistics 统计数据
- lable:sampler采样器名称
- samples:请求总数,并发数*循环次数
- KO:失败次数
- Error%:失败率
- Average:平均响应时间
- Min:最小响应时间
- Max:最大响应时间
- 90th pct: 90%的用户响应时间不会超过这个值(关注这个就可以了)
- 95th pct: 95%的用户响应时间不会超过这个值
- 99th pct: 99%的用户响应时间不会超过这个值 (存在极端值)
- throughtput:Request per Second吞吐量 qps
- received:每秒从服务器接收的数据量
- send:每秒发送的数据量
Charts图表
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 :连接耗时趋势
Throughput
- Hits Per Second (excluding embedded resources):每秒点击次数
- Codes Per Second (excluding embedded resources):每秒状态码数量
- Transactions Per Second:即TPS,每秒事务数
- Response Time Vs Request:响应时间和请求数对比
- Latency Vs Request:延迟时间和请求数对比
Response Times
- Response Time Percentiles:响应时间百分比
- Response Time Overview:响应时间概述
- Time Vs Threads:活跃线程数和响应时间
- Response Time Distribution:响应时间分布图
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
分布式压测
分布式压测介绍
- 普通压测:单台机可以对目标机器产生的压力比较小,受限因素包括CPU,网络,IO等
- 分布式压测:利用多台机器向目标机器产生压力,模拟几万用户并发访问
Jmeter分布式压测原理
- 总控机器的节点master,其他产生压力的机器叫“肉鸡” server
- master会把压测脚本发送到 server上面
- 执行的时候,server上只需要把jmeter-server打开就可以了,不用启动jmeter
- 结束后,server会把压测数据回传给master,然后master汇总输出报告
分布式压测使用
Jmeter分布式压测准备工作
- 压测注意事项
the firewalls on the systems are turned off or correct ports are opened.
系统上的防火墙被关闭或正确的端口被打开。all the clients are on the same subnet.
所有的客户端都在同一个子网上。the server is in the same subnet, if 192.x.x.x or 10.x.x.x IP addresses are used. If the server doesn’t use 192.xx or 10.xx IP address, there shouldn’t be any problems.
如果使用192.x.x.x或10.x.x.x IP地址,则服务器位于同一子网中。 如果服务器不使用192.xx或10.xx IP地址,则不应该有任何问题。Make sure JMeter can access the server.
确保JMeter可以访问部署接口的服务器。Make sure you use the same version of JMeter and Java on all the systems. Mixing versions will not work correctly.
确保在所有系统上使用相同版本的JMeter和Java。 混合版本将无法正常工作。You have setup SSL for RMI or disabled it.
您已为RMI设置SSL或将其禁用。注意:一定要用内网IP,不用用公网IP,用ping去检查
slave启动
所有测试的机子和部署接口服务的机子在一个子网
所有测试的机子安装相同版本的JMeter和Java
修改bin/jmeter.properties
- 禁用SSL:server.rmi.ssl.disable 改为 true 并取消注释,表示禁用
- 修改两个 server_port 即可,下面两个端口都配置成相同的8899
server.rmi.localport=8899
:表示slave server启动显示的端口
server_port=8899
:表示master机器要远程连接的端口(即master配置里 remote_hosts=xxxx:8899)
开放8899端口
所有slave启动Jmetere-server:
./jmeter-server
或者nohup ./jmeter-server &
./jmeter-serverUsing local port: 8899 Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.0.102:8899](local),objID:[3a585a4d:162724586ab:-7fff, 3963132813614033916]]]
检查启动是否成功:
ps -ef|grep jmeter-server
master启动
和所有slave与服务器在同一个子网
安装和所有slave相同版本的JMeter和Java
修改bin/jmeter.properties
- 禁用SSL:server.rmi.ssl.disable 改为 true 并取消注释,表示禁用
- 修改两个 server_port 即可,下面两个端口都配置成相同的8899
server.rmi.localport=8899
:表示slave server启动显示的端口
server_port=8899
:表示master机器要远程连接的端口(即master配置里 remote_hosts=xxxx:8899) - 修改remote_hosts:remote_hosts=masterIP:8899,slave1IP:8899,slave2IP:8899
启动Jmetere-server:
./jmeter-server
或者nohup ./jmeter-server &
检查启动是否成功:
ps -ef|grep jmeter-server
在主机执行非GUI分布式压测(增加参数 -r)
jmeter -n -t /Users/jack/Desktop/remote.jmx -r -l /Users/jack/Desktop/jtl/result.jtl -e -o /Users/jack/Desktop/result
#压测结果 ./jmeter -n -t /Users/jack/Desktop/remote.jmx -r -l /Users/jack/Desktop/jtl/result.jtl -e -o /Users/jack/Desktop/resultCreating summariser <summary> Created the tree successfully using /Users/jack/Desktop/remote.jmx Configuring remote engine: 172.20.10.3:8899 Using local port: 8899 Configuring remote engine: 172.20.10.11:8899 Starting remote engines Starting the test @ Thu Mar 29 23:21:13 CST 2018 (1522336873931) Remote engines have been started Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445 summary = 4 in 00:00:22 = 0.2/s Avg: 5582 Min: 94 Max: 21006 Err: 1 (25.00%) Tidying up remote @ Thu Mar 29 23:21:36 CST 2018 (1522336896842) ... end of run
注意
remote_hosts里的ip都是内网ip
如果主机不用做测试,那么可以不写masterIP:8899
master机器启动后会拷贝jmx文件到slave机器,所以不需要在每台slave机器上也上传一份jmx,只需要在master机器上上传一份jmx脚本即可。
- 如果使用csv进行参数化,则需要把参数文件在每台slave上拷一份且路径需要设置成一样的。
总样本数 = 线程数 * 循环次数 * 执行机总数
连接失败原因
- jmeter-server是否启动;
- 是否联网
- ping 服务器IP是否畅通.
- telnet 端口 192.168.3.10 1099
- 检查服务器的防火墙是否关闭。
- 阿里云安全策略是否正常
安装常见问题
问题1
[root@iZwz95j86y235aroi85ht0Z bin]# ./jmeter-server Created remote object: UnicastServerRef2 [liveRef: [endpoint:[:39308](local),objID:[24e78a63:16243c70661:-7fff, 7492480871343944173]]] Server failed to start: java.rmi.RemoteException: Cannot start. Unable to get local host IP address.; nested exception is: java.net.UnknownHostException: iZwz95j86y235aroi85ht0Z: iZwz95j86y235aroi85ht0Z: Name or service not known An error occurred: Cannot start. Unable to get local host IP address.; nested exception is: java.net.UnknownHostException: iZwz95j86y235aroi85ht0Z: iZwz95j86y235aroi85ht0Z: Name or service not known
解决:
hostname 命令获取机器名称,追加一个映射 iZwz95j86y235aroi85ht0Z vim /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6120.79.160.143 iZwz95j86y235aroi85ht0Zwindows用户 修改c:\windows\system32\drivers\etc\hosts文件,增加一条域名 与IP的映射
问题2
[root@iZwz95j86y235aroi85ht0Z bin]# ./jmeter-server Server failed to start: java.rmi.server.ExportException: Listen failed on port: 0; nested exception is: java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory) An error occurred: Listen failed on port: 0; nested exception is: java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)
解决:
拥有RMI over SSL的有效密钥库,或者禁用了SSL。 禁用SSL:jmeter.property里面 server.rmi.ssl.disable 改为 true,表示禁用
问题3
[root@iZ949uw2xehZ bin]# ./jmeter Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error='Cannot allocate memory' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 1073741824 bytes for committing reserved memory. # An error report file with more information is saved as: # /usr/local/jmeter/apache-jmeter-4.0/bin/hs_err_pid5855.log
解决:
编辑jmeter 搜索 : "${HEAP:="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}" 改变初始堆内存和最大堆内存
问题4.
"could not find ApacheJmeter_core.jar"
解决:
在Agent机器安装jdk,并设置环境变量
问题5
”Bad call to remote host"
解决:
检查被控制机器上的jmeter-server有没有启动,或者remote_hosts的配置是否正确。
问题6.多网卡配置
我们要在多网卡的服务器上开启RMI服务的话必须指定IP,使他们能够在同一个网段内。 需要以下几步(假定所有机器都在10.120.11.*网段,agent服务器为linux,controller服务器为windows):1、 修改agent服务器,指定agent机器的IP 修改jmeter-server文件 # vi jmeter-server 修改RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx(需要连接的IP)2、修改server服务器,指定server机器的IP修改jmeter.bat文件 新增set rmi_host=-Djava.rmi.server.hostname=10.120.11.214修改set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %DDRAW% %rmi_host%
Jmeter分布式压力测试与优化相关推荐
- Jmeter分布式压力测试
安装 下载地址:http://jmeter.apache.org/download_jmeter.cgi 安装前提(因为jmeter依赖于java所以必须先配置好java) 下载后解压: tar -x ...
- Jmeter分布式压力测试全过程(阿里云ECS)
测试环境搭建 测试脚本生成 非GUI界面测试操作 测试报告 本文主要是总结以下自己学习Jmeter的过程,测试用的接口和测试脚本都很简单. 1.测试环境搭建 首先是测试服务器 因为自己没有可以搭成局域 ...
- 大型网站压力测试及优化方案
作者:邴越 来自:cnblogs.com/binyue 0 木桶理论应用在系统优化中 木桶理论又称短板理论,其核心思想是一只木桶盛水多少,并不取决于最高的木板,而取决于最短的那块木板. 木桶原理应用在 ...
- jmeter 高并发测试报告_使用 JMeter 进行压力测试
原文连接:使用 JMeter 进行压力测试 一.前言 压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率:预估系统的承载能力 ...
- 基于Kubernetes的分布式压力测试方案
压力测试是用来检测系统承载能力的有效手段.在系统规模较小的时候,在一台空闲的服务器上使用[ab],[wrk],[siege]等工具发起一定量的并发请求即可得到一个初步的测试结果.但在系统复杂度逐步提高 ...
- JMeter 进行压力测试并发测试步骤,及文件上传并发测试演示
使用 JMeter 进行压力测试 一.前言 压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率:预估系统的承载能力,使我们能 ...
- 使用JMeter进行压力测试及参数设置
使用JMeter进行压力测试(基础篇) 1.启动Jmeter 双击图中所示文件出现如下图所示即启动成功 2 新建测试计划 File------>new 2.1右键新建线程组 add-----&g ...
- 性能压力测试TPS优化之路---SYN__
SYN Cookie的原理和实现 2014年01月06日 16:56:15 zhangskd 阅读数:28214 标签: TCPIPlinux内核 更多 个人分类: TCP/IPKernel 所属专栏 ...
- 支付系统接口性能压力测试TPS优化之路
支付系统接口性能压力测试TPS优化之路 郭柏雅 本文案例是我们品课学院在银行系统性能测试第一个案例,由发生至解决,通过对业务逻辑的认知.测试环境的了解.测试脚本的开发.服务的监控分析优化.操作系统的监 ...
最新文章
- archlinux常用的包管理器
- oracle安装参数,Oracle安装内核参数设置
- 集众家之所长,你工作中遇到的可视化问题,如何在 Tableau 官网提交 Case?
- 龟兔赛跑——多线程练习
- WebSocket 是什么原理?为什么可以实现持久连接?什么情况使用WebSocket
- 动态规划求一个序列的最长回文子序列(Longest Palindromic Substring )
- ios13苹方字体ttf_字体 | iOS1013 SF Compact Rounded 英文 By alex
- 如何理解K-L散度(相对熵)
- [RK3288][Android6.0] StageFright解码流程小结
- 介绍 Android 的 Camera 框架
- IP地址详解,网络分段
- java tbase_让java类继承TBase进行序列化
- 哪里可以在线转二维码?
- 用React Hooks与Web Animation API实现动效组件
- 易基因|干货:手把手教你做RNA m5C甲基化测序分析(RNA-BS)
- 从BIM到GIS(高级)| IFC LOD 200转LOD 3 CityGML
- 服务器iis短文件名漏洞,IIS短文件名漏洞分析及一个实例
- CSS篇一一简短介绍下CSS
- 日常一记(2)--vba修改模块名
- 华硕java安装教程win10_华硕骁龙835笔记本安装win10系统操作教程