服务器未能释放tcp连接,Redis连接未释放,造成TCP连接数过多

早上看到服务器告警通知,TCP连接数比较高,达到5000多,我设置的阈值是5000,正常TCP连接不会这么高,这样的一个阈值我可以提前知道有问题早点解决,不至于后面引起一系列问题,甚至拖垮服务器。

排查

登陆服务器,查看TCP连接数,如下

[root@app01]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

SYN_RECV 1

ESTABLISHED 8591

FIN_WAIT2 36

SYN_SENT 2

TIME_WAIT 85

netstat有关详细命令,前面有篇转载过一篇文章很详细,这里不介绍。TCP当时连接数是5000多,这里是后面连接数增加上去截的图。

接着想知道这些连接数是什么服务创建的呢?通过tcp socket建立的连接端口就能看到,截取部分如下

[root@app01]# netstat -antlp

tcp 0 0 iZbp147cv:afs3-prserver iZbp147cvofre8yt7:47204 ESTABLISHED 6541/./redis-server

tcp 0 0 iZbp147cv:afs3-callback iZbp147cvofre8yt7:46618 ESTABLISHED 6540/./redis-server

tcp 0 0 iZbp147cvofre8yt7:42628 iZbp147cv:afs3-callback ESTABLISHED 27325/java

tcp 0 0 iZbp147cv:afs3-callback iZbp147cvofre8yt7:40318 ESTABLISHED 6540/./redis-server

tcp 0 0 iZbp147cvofre8yt7:54024 iZbp147cv:afs3-prserver ESTABLISHED 27325/java

tcp 0 0 iZbp147cv:afs3-prserver iZbp147cvofre8yt7:33924 ESTABLISHED 6541/./redis-server

tcp 0 0 iZbp147cvofre8yt7:48902 kafkaServ:afs3-prserver ESTABLISHED 27325/java

tcp 0 0 iZbp147cvofre8yt7:52654 kafkaServ:afs3-prserver ESTABLISHED 12753/java

tcp 0 0 iZbp147cvofre8yt7:56148 iZbp147cv:afs3-prserver ESTABLISHED 27325/java

tcp 0 0 iZbp147cvofre8yt7:46952 redisServ:afs3-prserver ESTABLISHED 27325/java

tcp 0 0 iZbp147cvofre8yt7r:http 180.175.27.94:56713 TIME_WAIT -

tcp 0 0 iZbp147cvofre8yt7:43484 redisServ:afs3-prserver ESTABLISHED 27325/java

tcp 0 0 iZbp147cv:afs3-callback iZbp147cvofre8yt7:39678 ESTABLISHED 6540/./redis-server

tcp 0 0 iZbp147cv:afs3-prserver iZbp147cvofre8yt7:38570 ESTABLISHED 6541/./redis-server

tcp 0 0 iZbp147cvofre8yt7:37096 redisServ:afs3-prserver ESTABLISHED 27325/java

tcp 0 0 iZbp147cvofre8yt7:47764 redisServ:afs3-prserver ESTABLISHED 27325/java

tcp 0 0 iZbp147cvofre8yt7:34100 redisServ:afs3-prserver ESTABLISHED 27325/java

tcp 0 0 iZbp147cvofre8yt7:59924 kafkaServ:afs3-prserver ESTABLISHED 5299/java

tcp 0 0 iZbp147cv:afs3-prserver iZbp147cvofre8yt7:59626 ESTABLISHED 6541/./redis-server

tcp 0 0 iZbp147cv:afs3-prserver iZbp147cvofre8yt7:47298 ESTABLISHED 6541/./redis-server

统计了下

[root@app01]# netstat -antlp |grep -i established |egrep "7001|7002"|wc -l

8600

发现大多数建立的ESTABLISHED连接是java和redis之间的TCP连接。

那为何会建立这么多的连接呢?于是又看了监控,流量正常,并没有突发大流量进入。那很有可能是TCP连接后没有释放,找开发检查代码,果然是有个方法获取redis的key后,没有close。

bVbHqHX

代码改了之后重新运行,再来查看TCP连接

[root@app01]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

CLOSE_WAIT 1

ESTABLISHED 792

FIN_WAIT1 2

FIN_WAIT2 33

CLOSING 1

SYN_SENT 2

TIME_WAIT 115

到此,问题解决。

最后

小小问题,希望能帮助到遇到同样问题的同学~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值