设为首页收藏本站

LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区!

 找回密码
 注册

QQ登录

只需一步,快速开始

#公告#抱歉,网站将关闭,不再开放。由于PC时代已远逝 。在这个后移动互联网时代,我们继续携手前行,保持对技术的热情。共同构建linuxtone知识星球欢迎加入,一起讨论技术、招聘人才、分享资源。请新老linuxtone人 扫码移步到 知识星球:linuxtone

学习是一种信仰!分享是一种快乐!能力= 心态 * 沟通 * 知识 (你的每一天需要正能量!)

 网站的发展需要你贡献一份力量!希望你能每天坚持看贴1小时,并回答网友的问题!祝你在浏览论坛的过程中取得进步!谢谢!linuxtone加油!大家加油! 友情提示: 你今天学习了吗?你今天进步了吗?少一点抱怨!多一点进步!Life is short ! Why not linuxtone ?  

网站的发展、感谢每位坛友的努力!

查看: 59193|回复: 29

[Sys Performance] 解决TIME_WAIT过多问题   [复制链接]

LT管理团队

社区首席勤杂工

Rank: 9Rank: 9Rank: 9

签到
472
注册时间
2008-5-19
最后登录
2019-5-23
在线时间
1945 小时
阅读权限
200
积分
59165
帖子
2551
主题
1209
精华
25
UID
1

LT总司令

发表于 2008-9-8 16:57:10 |显示全部楼层
#netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

LAST_ACK 14
SYN_RECV 348
ESTABLISHED 70
FIN_WAIT1 229
FIN_WAIT2 30
CLOSING 33
TIME_WAIT 18122

状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉

也就是说,这条命令可以把当前系统的网络连接状态分类汇总。

下面解释一下为啥要这样写:

一个简单的管道符连接了netstat和awk命令。

??????????????????????

先来看看netstat:

netstat -n

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 123.123.123.123:80 234.234.234.234:12345 TIME_WAIT

你实际执行这条命令的时候,可能会得到成千上万条类似上面的记录,不过我们就拿其中的一条就足够了。

??????????????????????

再来看看awk:

/^tcp/
滤出tcp开头的记录,屏蔽udp, socket等无关记录。

state[]
相当于定义了一个名叫state的数组

NF
表示记录的字段数,如上所示的记录,NF等于6

$NF
表示某个字段的值,如上所示的记录,$NF也就是$6,表示第6个字段的值,也就是TIME_WAIT

state[$NF]
表示数组元素的值,如上所示的记录,就是state[TIME_WAIT]状态的连接数

++state[$NF]
表示把某个数加一,如上所示的记录,就是把state[TIME_WAIT]状态的连接数加一

END
表示在最后阶段要执行的命令

for(key in state)
遍历数组

print key,”\t”,state[key]
打印数组的键和值,中间用\t制表符分割,美化一下。

如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,
vim /etc/sysctl.conf
编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然后执行 /sbin/sysctl -p 让参数生效。

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout 修改系?默认的 TIMEOUT 时间

下面附上TIME_WAIT状态的意义:

客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口
状态为TIME_WAIT

是不是所有执行主动关闭的socket都会进入TIME_WAIT状态呢?
有没有什么情况使主动关闭的socket直接进入CLOSED状态呢?

主动关闭的一方在发送最后一个 ack 后
就会进入 TIME_WAIT 状态 停留2MSL(max segment lifetime)时间
这个是TCP/IP必不可少的,也就是“解决”不了的。

也就是TCP/IP设计者本来是这么设计的
主要有两个原因
1。防止上一次连接中的包,迷路后重新出现,影响新连接
(经过2MSL,上一次连接中所有的重复包都会消失)
2。可靠的关闭TCP连接
在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发
fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以
主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。

TIME_WAIT 并不会占用很大资源的,除非受到攻击。

还有,如果一方 send 或 recv 超时,就会直接进入 CLOSED 状态
<-sina_sign,1762622645,2a5b1a59,10->感谢大家对linuxtone的支持!</strong>

LT管理团队

社区首席勤杂工

Rank: 9Rank: 9Rank: 9

注册时间
2008-5-19
最后登录
2019-5-23
在线时间
1945 小时
阅读权限
200
积分
59165
帖子
2551
主题
1209
精华
25
UID
1

LT总司令

发表于 2008-9-8 19:10:01 |显示全部楼层
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
  net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
  net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
  net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
  net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
  net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
  net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
  net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。
默  认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

注:
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

设置这两个参数: reuse是表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接; recyse是加速TIME-WAIT sockets回收
<-sina_sign,1762622645,2a5b1a59,10->感谢大家对linuxtone的支持!</strong>

使用道具 举报

Rank: 6Rank: 6

注册时间
2008-6-30
最后登录
2017-9-11
在线时间
84 小时
阅读权限
70
积分
8643
帖子
50
主题
4
精华
0
UID
115
发表于 2008-11-4 11:48:16 |显示全部楼层
十分需要这样的文章

使用道具 举报

Rank: 6Rank: 6

注册时间
2008-11-12
最后登录
2015-4-6
在线时间
136 小时
阅读权限
70
积分
6235
帖子
168
主题
38
精华
0
UID
539

LT粉丝

发表于 2008-11-17 23:26:28 |显示全部楼层
功力尚浅,楼主的那条命令 让我想了几分钟阿 哈哈

使用道具 举报

Rank: 1

注册时间
2009-2-15
最后登录
2019-4-24
在线时间
0 小时
阅读权限
1
积分
5
帖子
10
主题
1
精华
0
UID
1433
发表于 2009-2-15 23:46:09 |显示全部楼层
十分需要这样的文章

使用道具 举报

LT管理团队

守住每一天

Rank: 9Rank: 9Rank: 9

注册时间
2008-5-30
最后登录
2017-3-31
在线时间
790 小时
阅读权限
200
积分
68279
帖子
1398
主题
190
精华
10
UID
31
发表于 2009-2-16 10:32:08 |显示全部楼层
太好了。。。

又看了一篇~~ 这文章 就是要经常看看啊。
<-sina_sign,1054764633,8fd6ea04,4-><-sina_sign,1054764633,7->

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2008-8-26
最后登录
2011-9-23
在线时间
207 小时
阅读权限
200
积分
583
帖子
165
主题
31
精华
2
UID
227

LT粉丝

发表于 2009-2-16 11:35:24 |显示全部楼层
很详细,看一遍要顶一遍

使用道具 举报

Rank: 6Rank: 6

注册时间
2009-2-19
最后登录
2018-4-13
在线时间
46 小时
阅读权限
70
积分
2568
帖子
48
主题
13
精华
0
UID
1513
发表于 2009-2-20 11:23:33 |显示全部楼层
前辈,真是前辈。前一段时间还在困惑于什么是TIME_WAIT而且为何这么多呢!
awk的用法也是让俺开眼界了

使用道具 举报

Rank: 2

注册时间
2008-12-31
最后登录
2010-5-4
在线时间
23 小时
阅读权限
20
积分
80
帖子
63
主题
6
精华
0
UID
810

LT粉丝

发表于 2009-2-25 13:27:56 |显示全部楼层
Simple world Simple life!~

使用道具 举报

Rank: 1

注册时间
2009-8-13
最后登录
2010-7-26
在线时间
12 小时
阅读权限
1
积分
21
帖子
27
主题
8
精华
0
UID
4761
发表于 2009-8-13 18:11:31 |显示全部楼层
支持一下。

使用道具 举报

Rank: 3Rank: 3

注册时间
2009-9-10
最后登录
2019-4-20
在线时间
18 小时
阅读权限
30
积分
636
帖子
8
主题
2
精华
0
UID
5310
发表于 2010-4-18 21:29:48 |显示全部楼层
好文

使用道具 举报

Rank: 6Rank: 6

注册时间
2008-12-17
最后登录
2013-3-26
在线时间
56 小时
阅读权限
70
积分
5126
帖子
143
主题
20
精华
0
UID
731

LT粉丝

发表于 2010-5-5 10:43:29 |显示全部楼层
Netseek
客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口
状态为TIME_WAIT

         是谁主动关闭?一般都是客户端主动关闭吧?但从tcp建立连接的状态图来看,TIMEWAIT是客户端正常状态变迁时出现在客户端的。服务器端是TIMEWAIT是怎么出 来的呢?

使用道具 举报

Rank: 6Rank: 6

注册时间
2011-5-8
最后登录
2014-8-15
在线时间
68 小时
阅读权限
70
积分
4627
帖子
86
主题
15
精华
0
UID
13539
发表于 2011-8-10 20:24:35 |显示全部楼层
又被我翻到有用的了.

使用道具 举报

Rank: 8Rank: 8

注册时间
2009-5-3
最后登录
2018-4-3
在线时间
179 小时
阅读权限
90
积分
23558
帖子
211
主题
1
精华
0
UID
2827
发表于 2011-8-14 02:08:58 |显示全部楼层
顶了!细细品味

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-1-5
最后登录
2015-7-2
在线时间
447 小时
阅读权限
90
积分
73982
帖子
300
主题
59
精华
0
UID
11677
发表于 2011-8-31 18:07:47 |显示全部楼层
确实挺管用
<-sina_sign,1911740435,a06243e0,1->

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

IT运维专家网感谢您的支持

合作联系: QQ:67888954/MSN:cnseek@msn.com/mail:netseek@linuxtone.org

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2019-6-21 07:20 , Processed in 0.028022 second(s), 14 queries , Apc On.

Powered by Discuz! X2 Licensed

© 2001-2011 Comsenz Inc.

回顶部