二、压力测试
压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都是为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数。 使用压力测试,我们有希望找到很多种用其他测试方法更难发现的错误。有两种错误类型是:内存泄漏,并发与同步。 有效的压力测试系统将应用以下这些关键条件:重复,并发,量级,随机变化。
1. 性能指标
-
响应时间(Response Time: RT):指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,整个过程所耗费的时间。 -
HPS (Hits Per Second) :每秒点击次数,单位是次秒。 -
TP (Transaction per Second):系統每秒处理交易(事务)数,单位是笔秒。 -
OPS (Query per Second) :系统每秒处理查询次数,单位是次秒。 对于互联网业务中,如果某些业务有且仅有一个请求连接,那么TPS-QPS-HPS,一般情况下用TPS来衡量整个业务流程,
用QPS来衡量接口查询次数,用HPS来表示对服务器单击请求。
-
无论TPS. QPS. HPS,此指标是衡量系统处理能力非常重要的指标,越大越好,根据经验,一般情况下: - 金融行业: 1000TPS-50000TPs,不包括互联网化的活动
- 保险行业: 100TPS-100000Tps. 包括互联网化的活动
- 制造行业: 10TPS-5000TPS
- 互联网电子商务: 1000OTPS-1000000TPS
- 互联网中型网站: 1000TPS-50000TPS
- 互联网小型网站: 500TPS~1000TPS
-
最大响应时间(Max Resonse Time,指用户发出请求或者指令到系统做出反应(响应)的最大时间。 -
最少响应时间(Mininum RespanseTime)指用户发出请求或者指令到系统做出反应(响应)的最少时间。 -
90%响应时间(90% Response Time) 是指所有用户的响应时间进行排序,第90%的响应时间。 -
从外部看,性能测试主要关注如下三个指标 1. 吞吐量:每秒钟系统能够处理的请求数、任务数
越大越好,吞吐量大了说明大并发
2. 响应时间: 服务处理一个请求或一个任务的耗时。
越小越好,响应时间小说明性能好,速度快
3. 错误率: 一批请求中结果出错的请求所占比例。
2. JMeter
JMeter Address Already in use错误解决
详情点击:https://www.bilibili.com/video/BV1np4y1C7Yf?p=143&spm_id_from=pageDriver
windows本身提供的端口访问机制的问题。 Windows提供给TCP/IP错接的端口为1024-5000,并且要四分钟来循环回收他们。就导致我们在短时间内跑大量的请求时将端口占落了。
-
cmd中,用regedit命令打开注册表 -
在 HKEY LOCAL MACHINESYSTEM\CurrentControlSet\Services\Ticpip\lParameters 下, 1、右击parameters,添加一个新的DWORD.名字为MaxUserPort
2、然后双击MaxUserPort,输入数值数据为65534,基数选择十进制(如果是分布式运行的话,控制机器和负载机器都需要这样操作哦)
-
修改配置完毕之后记得重启机器才会生效
1. JMeter安装
安装地址:https://jmeter.apache.org/download_jmeter.cgi 下载对应压缩包,解压运行jmeter.bat即可 选择中文
1. 线程组
测试都是模拟多个人同时来请求某一个接口,来测试它的性能,所以添加一个线程组
2. 添加请求
3. 查看结果
4. 汇总报告
5. 聚合报告
2. 优化
1. 调大内存 - Xmx
Xmx: java程序最大能使用多少内存大小 设置Xmx,增加吞吐量
2. 性能优化
-
影响性能考虑点包括: 1. 数据库(数据库快不快,慢不慢,sql语句性能高不高),
2. 应用程序(编码有没有更优化的写法,编码是否存在问题)、
3. 中间件(Tomcat、Nginx 比如首页发出请求需要通过Nginx,然后Nginx又将请求转交给微服务集群里面的网关,网关有又转给微服务,微服务里面又是Tomcat,Tomcat又调用程序来处理,这一段逻辑走完过了好多中间件,从Nginx到网关到Tomcat 这些中间件都是影响性能的原因)、
4. 网络和操作系统等方面(网速慢服务压力大,或者带宽只有1M,1w个并发请求,发送1kb的数据都发了10M的数据,所以带宽拥挤也影响接口吞吐量性能的原因,)
-
首先考虑自己应用属于CPU密集型还是IO密集型 cpu密集型:大量的运算,比如查到一堆数据需要计算->排序->过滤->整合 等等 或者后台监控看到CPU看到占用率一直是七八十百分之百
解决就是:多家几个服务器 cpu
IO密集型:包含网络IO传输数据,磁盘读写,数据库读数据 redis缓存中读数据,cpu占用率低,但是内存挤爆,磁盘也疯狂的读写数据包括网络流量非常大每秒要出入很多字节数据
解决就是:换固态硬盘,加内存条,使用各种缓存技术 提高网卡传输效率
3. 性能监控
除了一些报告外,最好开始看些监控指标,比如某个程序运行,看某个接口CPU占用多少,内存占用多少,线程数有多少等等
1、jvm内存模型
|