JMeter工具接口性能压力测试分析与优化
最近公司做的项目,要求对相关接口做性能压力测试,在这里记录一下分析解决过程。
压力测试过程中,如果因为资源使用瓶颈等问题引发最直接性能问题是业务交易响应时间偏大,TPS逐渐降低等。而问题定位分析通常情况下,最优先排查的是监控服务器资源利用率,例如先用TOP 或者nmon等查看CPU、内存使用情况,然后在排查IO问题,例如网络IO、磁盘IO的问题。 如果是磁盘IO问题,一般问题是SQL语法问题、MYSQL参数配置问题、服务器自身硬件瓶颈导致IOPS吞吐率问题。
一、具体测试结果如下:
| A接口、B接口性能壓力測試結果 | |||||||||
| 測試接口 | A接口、iB接口 | ||||||||
| 測試工具 | JMeter | ||||||||
| 測試機IP | 172.xx.xx.xx,172.xx.xx.xx | ||||||||
| 软硬件環境 |
双臺Linux操作系統服務器 应用服务器:tomcat(集群) 数据库:mycat+mysql(读写分离) |
||||||||
| 測試人員 | xxx | ||||||||
| 測試日期 | 2019/03/18-2019/03/19 | ||||||||
| 測試方案 | 1.采用階梯式增壓模式,每個階梯壓10min,接口響應時間在3s內 2.并發線程數從30,50,100,200倍數往上增 3.每個事務處理響應時間為100ms |
||||||||
| 測試需求 | 1)系統可用性:99.5%; 2)A接口在3s內回應; 3)B接口在3s內回應; 4)服務器支撐業務容量達:40 TPS 以上; 5)服務器的內存、CPU使用率不超過 75%; |
||||||||
| 結果描述 |
從如下表格測試數據中可得出: 注:如下結果數據表中,綠色標註為本次測試結果的最優值; 出錯率為響應時間超出3s的錯誤,測試中并未遇到出現程序上的異常問題. |
||||||||
| 場景 | 用例名稱 | 并發線程數(:個/秒) | 發包總數(:請求數) | 出錯率 | 平均TPS | 平均響應時間(:ms) | 90%Line(:ms) | 被測試服務器CPU利用率 | 被測試服務器memory |
| 單接口業務 | A接口 | 300 | 45842 | 0.00% | 76.4 | 389 | 782 | 18% | 45% |
| A接口 | 500 | 46141 | 0.00% | 76.8 | 645 | 1327 | 22% | 50% | |
| A接口 | 750 | 44129 | 0.00% | 73.4 | 1012 | 2095 | 21% | 50% | |
| A接口 | 900 | 42871 | 0.51% | 71.3 | 1250 | 2594 | 21% | 58% | |
| A接口 | 1000 | 41882 | 9.56% | 69.7 | 1422 | 2993 | 30% | 55% | |
| 單接口業務 | B接口 | 500 | 83145 | 0.00% | 138.4 | 358 | 880 | 30% | 60% |
| B接口 | 700 | 56325 | 0.03% | 93.8 | 739 | 1523 | 20% | 50% | |
| B接口 | 1000 | 57421 | 2.51% | 95.5 | 1037 | 2502 | 15% | 43% | |
| 混合接口業務 | A+B接口 | 300 | 54442 | 0.00% | 90.7 | 327 | 656 | 21% | 56% |
| A+B接口 | 500 | 53068 | 0.00% | 88.4 | 560 | 1218 | 25% | 60% | |
| A+B接口 | 700 | 49808 | 0.42% | 82.9 | 836 | 1878 | 25% | 55% | |
| A+B接口 | 1000 | 93104 | 17.95% | 61.9 | 959 | 3001 | 55% | 50% | |
events {
use epoll;
worker_connections 65535;
}
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="60000"
maxThreads="300"
acceptCount="500"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
enableLookups="false"
redirectPort="8443" />
JAVA_OPTS="-server -Dfile.encoding=UTF-8 -Xms4g -Xmx4g -Xmn2g -Xss512K -verbose:gc -XX:+UseConcMarkSweepGC
-XX:MaxTenuringThreshold=10 -XX:PermSize=512m -XX:MaxPermSize=1g -XX:+ExplicitGCInvokesConcurrent -XX:GCTimeRatio=19
-XX:+UseParNewGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=10
-XX:+CMSClassUnloadingEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=50
-Xnoclassgc -XX:SoftRefLRUPolicyMSPerMB=0
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9433
-Djava.rmi.server.hostname=172.xx.xx.xx
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"
然后进行以下分析:
3、查看慢sql,发现慢的SQL也没有,因为使用了Druid Monitor组件,可以使用它来分析
http://172.xx.xx.xx:8089/xxx/druid/sql.html

5、查看数据库磁盘io,发现比较低,只有10几%;
iostat -x 中 r/s w/s svctm<=6ms %util<80%

6、最后分析JMeter工具中的压测结果,发现有很多响应时间超过3s以上的,在应用日志中找到这些记录,分析调用链路(分布式系统)各个节点的耗时,发现有个应用中使用了synchronized锁,在高并发情况下获取锁耗时3s以上;

7、修复程序,重新压测,tps就达到了80左右,耗时多的记录也基本上没有了,至此,此次性能压力测试已结束。
注意:重复压测,会发现随着压测的次数增多,TPS会越来越低。那是因为应用中的日志会越来越大,导致写入时hand住了,要删除日志文件。
四、mysql性能监控指标:
、os层面
空间监控df -h ,防止文件系统空间满造成数据库hang住
性能cpu监控
vmstat
r队列,这个队列需要小于cpu核数,最大不要超过4倍???
top load average队列数量,同上???
top中sys cpu占比小于5%,iowait占比小于5%,user占比小于70%
top H线程占cpu占比,不要出现70%+的线程
、内存
vmstat中出现swap in out ,free至少2G以上
、io
iostat -x 中 r/s w/s
svctm<=6ms
%util<%
、网络监控
sar监控中,网络带宽不需要达到90%,一般1000Mbit/s 带宽足够使用,除了备份等场景 、数据库
真实负载监控 6、监控工具
ZABBIX
JMeter工具接口性能压力测试分析与优化的更多相关文章
- python学习笔记(threading接口性能压力测试)
又是新的一周 延续上周的进度 关于多进程的学习 今天实践下 初步设计的接口性能压力测试代码如下: #!/usr/bin/env python # -*- coding: utf_8 -*- impor ...
- [AapacheBench工具]web性能压力测试工具的应用与实践
背景:网站性能压力测试是性能调优过程中必不可少的一环.服务器负载太大而影响程序效率是很常见的事情,一个网站到底能够承受多大的用户访问量经常是我们最关心的问题.因此,只有让服务器处在高压情况下才能真正体 ...
- Web服务器性能压力测试工具http_load、webbench、ab、Siege使用教程
Web服务器性能压力测试工具http_load.webbench.ab.Siege使用教程 作者: feng 日期: 2012/07/25 发表评论 (0) 查看评论 一.http_load 程序 ...
- 三种web性能压力测试工具
三种web性能压力测试工具http_load webbench ab小结 题记:压力和性能测试工具很多,下文讨论的是我觉得比较容易上手,用的比较多的三种 http_load 下载地址:http://w ...
- 【转】Web性能压力测试工具之ApacheBench(ab)详解
PS:网站性能压力测试是性能调优过程中必不可少的一环.只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题.Apache中有个自带的,名为ab的程序,可以对Apache或其它类型的服务器进行网 ...
- Web性能压力测试工具之ApacheBench(ab)详解
PS:网站性能压力测试是性能调优过程中必不可少的一环.只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题.Apache中有个自带的,名为ab的程序,可以对Apache或其它类型的服务器进行网 ...
- Web性能压力测试工具之Apache AB 详解
下载安装地址: http://httpd.apache.org/download.cgi yum install httpd-tools http://www.apachelounge.com/dow ...
- Web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程 - VPS侦探
Web服务器性能/压力测试工具http_load.webbench.ab.Siege使用教程 - VPS侦探 http://soft.vpser.net/test/http_load/http_loa ...
- [转] Web性能压力测试工具之ApacheBench(ab)详解
PS:网站性能压力测试是性能调优过程中必不可少的一环.只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题.Apache中有个自带的,名为ab的程序,可以对Apache或其它类型的服务器进行网 ...
随机推荐
- javascript总结50:认识instanceof 与 原型链
1 instanceof: 1.1 普通使用下: 判断一个对象是否是某个构造函数的实例: 语法 : 对象 instanceof 函数 是则返回true,不是则返回false. console.log( ...
- c#范型
泛型介绍:范型类和范型方法同事具备可重用性.类型安全和效率,这是非范型类和非范型方法无法具备的. 所谓范型,即通过参数化类型实现同一份代码上操作多种数据类型,范型编程是一种编程范式,它利用“参数化类型 ...
- up7.1-asp.net-本地测试教程
1.1. ASP.NET 框架:.NET Framework 4.5 依赖库:csredis,Newtonsoft.Json 安装redis 下载 redis-x64:http://pan.bai ...
- JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(12):XML配置自动扫描包,自动加载*.properties文件
一.XML和注解组合使用 前几篇的测试案例都是在Java类中配置,现在换一种使用方式,在XML中配置,使Spring IoC容器在启动之后自动去扫描配置的包路径,扫描加载指定路径下的propertie ...
- Robot Framework资料
https://www.cnblogs.com/pachongshangdexuebi/category/981644.html 虫师 :http://www.cnblogs.com/fnng/ ...
- 如何为 smartraiden 贡献代码
如何为 smartRaiden 贡献代码 1.Fork 项目 登录 github 账号,并访问https://github.com/SmartMeshFoundation/SmartRaiden,然后 ...
- DELL PowerEdge R410系统日志满报错
DELL PowerEdge R410系统日志满报错 重启服务器时在自检过程中看到CTRL+E时快速按下CTRL+E进入到远程管理ip地址配置界面
- JDK安装目录分析-两个jre和三个lib
安装JDK后,Java目录下有jdk和jre两个目录,但jdk下还有一个jre目录,而且这个jre比前面那个jre在bin目录下少了个server文件夹(Server端的Java虚拟机)!前一个jre ...
- 爬虫开发.2urllib模块
一.urllib库 概念:urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urll ...
- 在CMD中建立一个不能删除的文件
Windows 下不能够以下面这些字样来命名文件/文件夹,包括:“aux”“com1”“com2”“prn”“con”和“nul”等,因为这些名字都属于设备名称,等价于一个 DOS 设备,如果我们把文 ...