测试目的
针对uat环境的用户并发量和系统瓶颈,都是未知的。
本轮压力测试,抽取部分代表性查询接口,主要是为了测试后台系统UAT环境主要接口吞吐量和响应时间,初步找出系统的瓶颈。
测试内容
压测接口清单
- api/nonmetalPla/list(pla(post))
- api/warehouse/searchCarType (查询基础数据(post) )
- api/dict/findDictByParentCode (根据父类编码查询下级字典(post) )
- 压测数据库查询m_dict数据 (jdbc连接 )
测试环境
| 环境 | 机器型号 | CPU | 操作系统 | 内存 | 磁盘 |
|---|---|---|---|---|---|
| 应用服务器 | linux虚拟机 | CPUIntel® Xeon® Gold 6132 CPU @ 2.60GHz 4个单核四线程 |
CentOS Linux release 7.5.1804 (Core) 单机 | total:8G ,可用内存: free+buffers/cached = 2.3G | tatal:26G used:15G |
| 压测机器 | 宏碁4750 | 单个双核四线程 | win10 单机 | 8G | total:8G used:3G |
测试方法
压测工具和指标
| 类别 | 说明 |
|---|---|
| 压测工具 | apache-jmeter-5.1.1(单台win环境) |
| 压测性能相关参数 | 协议: http 方法: get/post 并发数 、总请求数、吞吐率(TPS)、响应时间、错误率 |
测试时间
测试时间:9:00-12:00(工作时间) ,内网环境压测
针对每个接口分别执行并发数10、30、90、270并发数执行120秒
统计指标
进行压力测试,并对产生的每秒TPS,响应时间(min,ave,max)及错误率进行统计
测试结果(第一轮)
汇总表
| 接口名称 | 数据量 | 并发数 | 持续时间 | samples | average | min | max | median | 90%Line | 95%Line | 99%Line | error% | tps(s) | received(kb/s) | sent(kb/s) |
| pla(post) | limit 10 | 120s | |||||||||||||
| api/nonmetalPla/list | 10 | 5113 | 233 | 73 | 2458 | 191 | 345 | 408 | 827 | 0 | 42.41921434 | 1672.45209 | 21.91383241 | ||
| api/nonmetalPla/list | 30 | 5323 | 673 | 146 | 8692 | 543 | 1196 | 1561 | 2619 | 0 | 43.96775313 | 1733.505954 | 22.71380996 | ||
| api/nonmetalPla/list | 90 | 6224 | 1737 | 161 | 26447 | 1262 | 3238 | 4445 | 8283 | 0 | 49.34982556 | 1945.703621 | 25.49419699 | ||
| api/nonmetalPla/list | 270 | 7586 | 4298 | 155 | 44290 | 3359 | 7611 | 9445 | 15606 | 0 | 59.22213375 | 2334.936724 | 30.59424683 | ||
| 查询基础数据(post) | limit 10 | ||||||||||||||
| /api/warehouse/searchCarType | 10 | 2602 | 459 | 113 | 3458 | 393 | 692 | 937 | 1496 | 0 | 21.5274388 | 1078.600366 | 11.28929163 | ||
| /api/warehouse/searchCarType | 30 | 4456 | 805 | 105 | 7980 | 670 | 1369 | 1712 | 2686 | 0 | 36.9694355 | 1852.298689 | 19.38729186 | ||
| /api/warehouse/searchCarType | 90 | 5044 | 2150 | 172 | 11822 | 1781 | 3441 | 4277 | 6622 | 0 | 41.092654 | 2058.886432 | 21.54956562 | ||
| /api/warehouse/searchCarType | 270 | 6504 | 5022 | 154 | 79084 | 3997 | 8100 | 10222 | 17749 | 0 | 51.1437356 | 2562.480956 | 26.82049416 | ||
| 根据父类编码查询下级字典(post) | limit 10 | ||||||||||||||
| /api/dict/findDictByParentCode | 10 | 652 | 1842 | 225 | 12681 | 1505 | 2617 | 5084 | 6542 | 0 | 5.201643464 | 3.682313378 | 2.722735251 | ||
| /api/dict/findDictByParentCode | 30 | 1942 | 1861 | 267 | 11447 | 1489 | 3467 | 4896 | 6968 | 0 | 15.58337346 | 10.10484372 | 8.156922043 | ||
| /api/dict/findDictByParentCode | 90 | 5464 | 1986 | 284 | 23215 | 1604 | 2840 | 5219 | 6941 | 0 | 43.72669217 | 28.97468862 | 22.88819043 | ||
| /api/dict/findDictByParentCode | 270 | 16931 | 1921 | 72 | 14632 | 1505 | 3356 | 5021 | 6597 | 1.07 | 131.6268411 | 88.65045632 | 68.13092412 | ||
| jdbc连接 | limit 10 | ||||||||||||||
| 压测数据库查询m_dict数据 | 10 | 17390 | 66 | 10 | 13343 | 40 | 116 | 179 | 312 | 0 | 145.2 | 145.46 | 0 | ||
| 压测数据库查询m_dict数据 | 30 | 18909 | 181 | 10 | 8165 | 118 | 351 | 474 | 845 | 0 | 157.5 | 157.78 | 0 | ||
| 压测数据库查询m_dict数据 | 90 | 15052 | 709 | 13 | 12010 | 538 | 1106 | 1566 | 6648 | 0.48 | 125.1 | 124.78 | 0 | ||
| 压测数据库查询m_dict数据 | 270 | 19391 | 1681 | 13 | 10848 | 1517 | 2593 | 3232 | 7707 | 0 | 158.1647635 | 158.47 | 0 |
接口压测实况图
下面抽取并发量为90的情况下各个测试接口的资源情况tps、响应时间
下面抽取并发量为90的情况下各个测试接口的资源情况,分别是内存和cpu状况图、响应时间、tps
一、api/nonmetalPla/list((post))
二、/api/warehouse/searchCarType (查询基础数据(post) )
三、/ api/dict/findDictByParentCode (根据父类编码查询下级字典(post) )
四、压测数据库查询m_dict数据 (jdbc连接 )
测试结果第二轮…进行中
汇总表
接口压测实况图
测试结果分析
结论:
- 带宽、内存、内存、磁盘等指标在网页查看一直表现的比较正常,在命令行直接进去服务器查看,cpu有超过100%的几次状况。
- 并发数在90以内时,接口响应时间基本能保证在2s内
- 普通数据库查询接口tps有提升空间,塑料接口在10-270的并发下均能保持40tps以上
- 查询车型基础数据(post) 接口相比塑料仍较慢,可做进一步优化,考虑字段过多,sql查询方面的问题
- 根据父类编码查询下级字典(post)接口耗时非常严重,需要比较优先优化,考虑索引和sql方面的问题
- 数据库压测tps只有120-150左右,需要进一步提高,考虑服务器性能方面和mysql配置问题,在非工作时间有尝试压测
- 对于接口耗时较长的情况,目前引入了redis,但是目前用的地方很少,redis几乎闲置,接口可以考虑结合使用redis
- 非工作时间,服务器和带宽都是比较宽裕的状况,这几个目标接口的压测结果tps都提高了很多,对于如何进一步优化服务器资源这些待解决