大量TIME_WAIT的惨案

1.背景介绍

XX系统(新上线):实时处理商家订单和客服成单信息;

部署情况:灰测阶段,单实例;

 

业务逻辑中通过redis缓存顾客和客服状态,订阅所有的付款订单消息,并同步更新顾客和客服状态;

保证数据一致性,通过redis实现对状态数据加锁;

redis操作主要包含:GET /SET(NX)

错误信息:

翻译一下就是:本地已经没有端口用于建立tcp链接,同时CPU使用率居高不下,内存占用很高;

 

事后分析发现:上下文切换,系统调用都很高

 

2.问题分析过程

a. “连接泄露”

首先检查代码,都是通过连接池获取连接在使用完成后归还;

已排除

 

b. 连接池参数设置问题

 

原因分析:

 

 

图1:

 

图2:

 

3.问题修复

修改前:

修改后: