项目背景

公司为缩减服务器成本,需要对 WMS 系统服务器 CPU 核数进行缩容,需要在新的服务器上对核心接口及主要业务流程进行压测,评测新服务器上的应用是否满足预期性能指标

测试场景

4 级、5 级扫码接口混合场景

测试环境

应用 配置 数量
MCS(单实例,与 WMS 其它应用混合部署) 16C/64G/SAS Raid10 1
Mysql 16C/128G/SSD Raid5 1
压力机 16C/64G/SAS Raid10 1

网络环境:公司内网

问题描述

Jmeter 压测时,应用负载波动很大,持续几十秒钟之后,使用 user 使率下降到个位数,sys 使用率突然上升到 90% 以上

问题排查

  1. 查看应用日志并没有报错异常
  2. 查看 Mysql 资源使用率 (一直不高)
  3. 降低并发数,问题仍然存在,只不过 user 使用率下降周期变长,sys 使用率仍然飙到 90%
  4. Dump 应用线程,发现大量线程都在 Waiting 状态
  5. 增加 Tomcat 连接池到 1000,问题仍然存在
  6. strace 查看应用进程发现有 Connection time out 的错误
  7. 通过步骤 6 的线索,查看应用端口连接状态,发现有 2w 多的 timeout 状态的连接。
看到这就知道问题所在了,如果客户端的并发量持续很高,会出现大量处于 timewait 状态的连接,会使服务器因端口资源不足而拒绝为一部分客户端请求。修改内核参数之后问题解决,修改内容如下:

sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_tw_recycle=1
sysctl -w net.ipv4.ip_local_port_range="2048 65000"


↙↙↙阅读原文可查看相关链接,并与作者交流