当我早上看到服务器警报通知时,TCP连接的数量相对较高,达到了5,000多个. 我设置的阈值为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连接数超过5,000. 这是增加后的连接数的图形.
接下来,我想知道是什么服务创建了这些连接?可以看到通过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
发现大多数已建立的连接是java和redis之间的TCP连接.

那为什么要建立这么多连接?因此,我再次查看了监视tcp连接数过高,流量正常tcp连接数过高,没有突然的大流量进入. TCP连接很可能没有释放. 查找开发检查代码. 当然,有一种无需关闭即可获取redis密钥的方法.
更改代码后再次运行,然后检查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
至此,问题解决了.
小问题,希望对遇到同样问题的同学有所帮助~~
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-277331-1.html
这个世界没人敢惹美国
由贪腐导至信仰缺失