该文档为简单通用的压力测试模板,更快速,更高效的进行文档撰写
XXX系统性能压测报告
- 压测时间:2022-07-14
- 压测说明:本次压力测试主要是为了找出系统瓶颈
压测对象
XXX系统
环境
版本信息
类别 | 说明 |
---|
服务器 | 192.168.1.1 |
数据库 | MYSQL-8.0.21 |
服务容器 | TOMCAT-9.0.63 |
Redis | 6.2.6 |
RabbitMQ | 3.9.14 |
JDK | openjdk version “1.8.0-262” (build 1.8.0-262-b10) 64-Bit |
硬件信息
类别 | 说明 |
---|
服务器CPU | Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz 12核心24线程 |
硬盘 | Lenovo SSD SL700,型号LSL70240B0CFF03998,240GB |
内存 | 64GB,Free=6.6GB,Used=41.7GB |
交换区 | 15GB |
服务调用链路
链路 | 是否命中DB | 理论DB次数 | 缓存生效后DB命中次数 | 性能/评估 |
---|
A -> redis | – | – | – | – |
A -> redis -> B -> mysql | yes | 1 | – | – |
A -> C -> B,mysql | yes | 3 | 3 | 根据设备数量指数影响 |
A -> redis -> G | yes | 1 | – | – |
A -> redis -> S | yes | 3 | – | 缓存更新不及时 |
A -> redis -> B | yes | 少数 | 少数 | 较少影响 |
调优参数
Tomcat
类别 | 参数 | 值 |
---|
Tomcat | 等待队列长度 | 2000 |
Tomcat | 最大线程 | 800 |
Tomcat | 最小线程 | 100 |
Hikari
类别 | 参数 | 值 |
---|
Hikari | 连接 | 30s |
Hikari | 超时 | 30s |
Hikari | 线程 | 30 |
Hikari | 连接时长 | 1765000ms |
Jedis-Pool
类别 | 参数 | 值 |
---|
jedis-pool | max-active | 100 |
jedis-pool | max-wait | 5000 |
jedis-pool | max-idle | 5 |
jedis-pool | min-idle | 1 |
Hystrix
类别 | 参数 | 值 |
---|
Hystrix | 策略 | 信号量 |
Hystrix | 最大信号量 | 8000 |
Feign
类别 | 参数 | 值 |
---|
Feign | 懒加载 | 开启 |
Feign | 熔断 | 开启 |
Feign | 压缩算法 | 开启 |
Feign | 默认连接时间 | 30000 |
Feign | 默认超时时间 | 50000 |
Ribbon
类别 | 参数 | 值 |
---|
Ribbon | 最大重试次数 | 0 |
Ribbon | 重试 | 关闭 |
Ribbon | 请求连接时间 | 10000 |
Ribbon | 超时时间 | 10000 |
服务内存分配
类别 | 参数 |
---|
A | 2GB |
B | 2.5GB |
C | 1.5GB |
G | 256MB |
S | 256MB |
压测数据|服务器基准测试
- 本次测试,对服务器进行基准测试,以基础服务的三个接口分别进行衡量
- 测试工程:test-project
- Git: https://gitlab
- apache-jmeter-5.4.1
- Linux version 3.10.0-957.el7.x86_64 version 4.8.5 20150623 (Red Hat 4.8.5-36)
服务器标准压力测试
接口 | 协议 | 方法 | 主机 | 线程数 | 总样本 | 吞吐量 | 响应时间-均值 | 响应时间-最小 | 响应时间-最大 |
---|
/test/get | http | get | 192.168.4.164:8081(nacos+common+kit+mysql+redis+stream) | 500 | 7830236 | 88872.9/s | 5 | 0 | 1011 |
/test/get | http | get | 192.168.4.164:8081(nacos+common+kit+mysql+redis+stream) | 500 | 11676855 | 83440.1/s | 5 | 0 | 1016 |
/test/get | http | get | 192.168.4.164:8081(nacos+common+kit+mysql+redis+stream) | 500 | 93893364 | 84221.5/s | 5 | 0 | 1054 |
Redis|set + get
接口 | 协议 | 方法 | 主机 | 线程数 | 总样本 | 吞吐量 | 响应时间-均值 | 响应时间-最小 | 响应时间-最大 |
---|
/test/redisGet | http | post | 192.168.4.164 | 100 | 2784253 | 40935.3/s | 2 | 0 | 942 |
/test/redisGet | http | post | 192.168.4.164 | 500 | 757883 | 10451.1/s | 47 | 0 | 1227 |
/test/redisGet | http | post | 192.168.4.164 | 1000 | 300363 | 3241.0/s | 308 | 1 | 1931 |
MYSQL写入1次DB
接口 | 协议 | 方法 | 主机 | 线程数 | 总样本 | 吞吐量 | 响应时间-均值 | 响应时间-最小 | 响应时间-最大 |
---|
/test/dbWrite | http | post | 192.168.4.164 | 100 | 195939 | 3826.3/s | 25 | 4 | 1281 |
/test/dbWrite | http | post | 192.168.4.164 | 500 | 267124 | 3253.9/s | 151 | 5 | 1084 |
/test/dbWrite | http | post | 192.168.4.164 | 1000 | 91968 | 1255.9/s | 788 | 5 | 3145 |
MYSQL查询1次DB
接口 | 协议 | 方法 | 主机 | 线程数 | 总样本 | 吞吐量 | 响应时间-均值 | 响应时间-最小 | 响应时间-最大 |
---|
/test/dbGet | http | post | 192.168.4.164 | 100 | 774145 | 12785.9/s | 7 | 0 | 468 |
/test/dbGet | http | post | 192.168.4.164 | 500 | 542922 | 5130.9/s | 97 | 1 | 2966 |
/test/dbGet | http | post | 192.168.4.164 | 1000 | 149840 | 1500.1/s | 657 | 1 | 11066 |
压测数据|本次主要对象
- 测试工程:test-project
- apache-jmeter-5.4.1
- Linux version 3.10.0-957.el7.x86_64 version 4.8.5 20150623 (Red Hat 4.8.5-36)
登录接口
接口 | 协议 | 方法 | 主机 | 线程数 | 总样本 | 吞吐量 | 响应时间-均值 | 响应时间-最小 | 响应时间-最大 | 错误率 |
---|
/token/user/login | http | post | 192.168.4.164 | 100 | 11019 | 80.5/s | 1225 | 394 | 7586 | 0.15% |
/token/user/login | http | post | 192.168.4.164 | 500 | 10241 | 82.1/s | 5857 | 476 | 15020 | 2.79% |
/token/user/login | http | post | 192.168.4.164 | 1000 | 10405 | 85.0/s | 11059 | 299 | 15382 | 44.15% |
验证码接口
接口 | 协议 | 方法 | 主机 | 线程数 | 总样本 | 吞吐量 | 响应时间-均值 | 响应时间-最小 | 响应时间-最大 | 错误率 |
---|
/token/user/check | http | post | 192.168.4.164 | 100 | 27220 | 242.7/s | 406 | 80 | 1097 | 0% |
/token/user/check | http | post | 192.168.4.164 | 500 | 10241 | 225.8/ | 2180 | 220 | 8964 | 0% |
/token/user/check | http | post | 192.168.4.164 | 1000 | 22882 | 155.9/s | 6231 | 54 | 15364 | 10.91% |
建议与优化
影响因子
- Redis:
max-idle阈值为120-360较为合理
max-idle数量越大,占用内存越高
max-idle参数增大,吞吐量变高,但过大的配置,吞吐量适得其反
默认服务256M较难支持360个idle及以上配置(360个idle大约500M) - AOP组件
影响约10%左右的吞吐量 - 组件@SpringBootApplication(scanBasePackages = “com.test”)
影响严重,40%-70%不等 - 接口返回值
返回值数据量越大,性能指数下降 - 接口请求参数
较为合理范围内的数据量会有略微的影响 - HTTP与HTTPS
服务链路全采用HTTPS会有一定的性能影响,https的ECC比RSA更快