京东质量社区 排查扫码接口在压测过程中,sys_cpu 使用率过高的问题

亚瑟王 for 京东 · March 06, 2017 · Last by zailushang replied at April 17, 2017 · 1403 hits

项目背景

公司为缩减服务器成本,需要对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"

共收到 4 条回复 时间 点赞

不错

不错,这个调优化工作很赞,可以当案例了。Tks

sysctl -w net.ipv4.tcp_tw_reuse=1(这块是什么意思啊?
sysctl -w net.ipv4.tcp_tw_recycle=1(快速回收TIME_WAIT,root权限)
sysctl -w net.ipv4.ip_local_port_range="2048 65000"(临时端口范围)

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up