测试目标
首先要明确测试目标,测试目标包含并发用户数、并发时间、需要到达的tps和成功率。包含以下两个场景
- 稳定性:1000并发用户数,12小时,tps1000以上,响应成功率100%
- 峰值:1000并发用户数,10分钟,tps5000以上,响应成功率100%
以稳定性为例,生产环境4个进程需要达到1000tps,则每个进程需要250tps,生产环境按测试环境50%计算,那么测试环境压测单进程需要达到500tps。
影响TPS因素
服务器的资源:CPU(资源、使用率)、内存(资源、使用率)、磁盘性能(写日志)
网络带宽(大量传输数据场景需要考虑):单位时间内传递的数据包太大,超过带宽的传输能力,间接造成服务器处理请求数量达不到上限
数据库配置:如果请求数据需要写入数据库,且需要写入多个表的时候,如果数据库的最大连接数不够,或者没有主从分离、读写分离等,就会导致数据库事务处理过慢,影响到TPS。
连接池: 连接池中可用连接数量不够,一般分为服务器连接池(比如Tomcat)和数据库连接池(或者理解为最大允许连接数也行)
应用限制:JVM内存,最大请求数,最大监听队列,最大线程数
通信连接机制:串行、并行、长连接、管道连接等不同连接方式
业务逻辑处理方式:同步、异步(内存、消息中心)
压力机:单机压测,分布式多机压测
测试方式
通过本机Jemter对服务器进行并发的测试(测试结果需要考虑本机的限制)。
通过压测部门,多台机器进行并发测试。
测试过程
选择空闲服务器部署需要压测的服务,如果并发要求比较高,可以增加服务器资源(CPU和内存),打开服务器限制(进程最大读取fd数,最大监听队列,系统fd总打开数)。
# 打开进程最大文件数(open files)限制。 # 设置单进程打开fd限制(用户) vim /etc/security/limits.conf # 追加: * hard nofile 65535 * soft nofile 65535 以上配置为推荐值 # 全局fd打开限制 vim /etc/sysctl.conf fs.file-max = 2000000 # 系统最大能打开的fd数 fs.nr_open = 2000000 # 单一进程能打开的fd数 以上配置为推荐值 #注意:设置nofile的hard limit还有一点要注意的就是hard limit不能大于/proc/sys/fs/nr_open, 假如hard limit大于nr_open,注销后将无法正常登录。 # tcp 相关队列 net.ipv4.tcp_max_syn_backlog = 8192 # tcp半连接队列(握手用) 以上配置为推荐值 # 监听队列, 操作系统和服务配置的最小值,下列配置监听队列实际为20 操作系统设置1024: net.core.somaxconn = 1024 以上配置为推荐值 服务20:new ServerSocket(9090,20),tomcat默认值100 tomcat推荐值(默认值)100(100) nginx推荐值(默认值)512(512)
- 配置应用相关的参数
# 最大连接数 推荐值(默认值)8192(8192) server.tomcat.max-connections=8192 # tomcat监听队列 受到操作系统最大监听队列的约束 # 推荐值(默认值)100(100) server.tomcat.accept-count=100 # 业务线程数 # 推荐值(默认值)根据内存和cpu资源调整 (200) server.tomcat.max-threads=200 - 部署和配置性能监控相关的工具,springboot admin监控,prometheus监控。
压测过程中需要关注以下指标
cpu使用率:目标接近90%
内存使用率:使用接近JVM分配内存,JVM内存分配后需要给操作系统和其他服务预留一定资源
JVM gc情况:gc耗时
JVM线程状态:是否有很时间等待和死锁
磁盘IO:大量读写时需要关注
网络IO:大量数据传输时需要关注
- 进行压测,并发量未达到目标可能存在的情况。
1.报错:根据报错日志分析 2.应用挂了:一般先考虑内存泄漏 3.服务器负载满但没有达到期望并发:扩CPU和内存 4.服务器负载较低:考虑io和死锁的问题,io情况下可以根据数据库的负载,调大处理线程和连接池 - 参考配置
数据库连接数:(10-10)根据需要调整
tomcat线程数:默认200,一般够用
JVM内存:2G
异步线程池大小:推荐小于20
gc方式:4G以下 默认PSPO 4G以上G1
性能参考
| 服务器 | JVM内存 | 并发用户 | 压测时间 | TPS | 网络(Mbps) | CPU | 内存 |
|---|---|---|---|---|---|---|---|
| 2C 4G | 2G | 1000 | 12小时 | 1500 | 95 | 80% | 50% |
| 4C 8G | 4G | 1000 | 12小时 | 1700 | 95 | 70% | 50% |