排查压测接口时,应用出现sys_cpu 使用率过高的问题
-
项目背景
公司为缩减服务器成本,需要对WMS系统服务器CPU核数进行缩容,需要在新的服务器上对核心接口及主要业务流程进行压测,评测新服务器上的应用是否满足预期性能指标
-
测试场景
4级、5级扫码接口混合场景
-
测试环境
应用 |
配置 |
数量 |
MCS(单实例,其它应用混合部署) |
16C/64G/SAS Raid10 |
1 |
Mysql |
16C/128G/SSD Raid5 |
1 |
压力机 |
16C/64G/SAS Raid10 |
1 |
-
网络环境
公司内网
-
问题描述
Jmeter压测时,应用负载波动很大,持续几十秒钟之后,使用user使率下降到个位数,sys使用率突然上升到90%以上
-
问题排查
- 查看应用日志并没有报错异常
- 查看Mysql资源使用率(一直不高)
- 降低并发数,问题仍然存在,只不过user使用率下降周期变长,sys使用率仍然飙到90%
- Dump应用线程,发现大量线程都在Waiting状态
5. 增加Tomcat连接池到1000,问题仍然存在
6. strace查看应用进程发现有 Connection time out的错误
7. 通过步骤6的线索,查看应用端口连接状态,发现有2w多的timeout状态的连接。
看到这就知道问题所在了,如果客户端的并发量持续很高,会出现大量处于timewait状态的连接,会使服务器因端口资源不足而拒绝为一部分客户端请求。修改内核参数之后问题解决,修改内容如下:
sysctl -w net.ipv4.tcp_tw_reuse
sysctl -w net.ipv4.tcp_tw_recycle=1
sysctl -w net.ipv4.ip_local_port_range="2048 65000"