首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux tcp的timewait如何解决

开头 本文从内核的角度看timewait是如何解决的。贴代码,和网上看到的挺多冲突的! 1. timewait是什么 timewait在tcp结束后主动关闭一方的等待时候的行为。...2. timewait在客户端的问题 这里的客户端,不是四次握手的客户端,而是指发起tcp请求的一方。...当和上一次四元组一样时,需要满足timewait可重用条件,则可以复用,否则不能用该端口。...所以需要解决timewait的客户端问题有三个办法: 上游节点分散处理,尽量保证四元祖不一样 开启timestamp 限制timewait的数量,sysctl_max_tw_buckets timewait...) return NULL; } 4 服务器端timewait有什么影响 服务器(非tcp四次握手的服务器,指如web服务器)的timewait主动端开,端口都是同一个不影响端口,但是占用机器资源。

2K10

TIMEWAIT状态「建议收藏」

目录 TIMEWAIT是`友好的` `大量`TIMEWAIT在某些场景中导致的`令人头疼的业务问题` 可行而且必须存在,但是`不符合原则的解决方式` 如何`尽量并合理地处理`TIMEWAIT过多 ---...TIMEWAIT是友好的 Note1:什么是TIME_WAIT状态?     ...这个场景下,会出现大量socket处于TIMEWAIT状态。如果客户端的并发量持续很高,此时部分客户端就会显示连接不上。 ⇒ ⇒ 来解释下这个场景。主动正常关闭TCP连接,都会出现TIMEWAIT。...可行而且必须存在,但是不符合原则的解决方式 linux没有在sysctl或者proc文件系统暴露修改这个TIMEWAIT超时时间的接口,可以修改内核协议栈代码中关于这个TIMEWAIT的超时时间参数,重编内核...如果服务器上跑的短连接业务量到了我真的必须处理这个TIMEWAIT状态过多的问题的时候,解决原则是尽量处理,而不是跟TIMEWAIT干上,非先除之而后快:)如果尽量处理了,还是解决不了问题,仍然拒绝服务部分请求

54310
您找到你想要的搜索结果了吗?
是的
没有找到

Linux源码看TIME_WAIT状态的持续时间

前言 笔者一直以为在Linux下TIME_WAIT状态的Socket持续状态是60s左右。线上实际却存在TIME_WAIT超过100s的Socket。由于这牵涉到最近出现的一个复杂Bug的分析。...所以,笔者就去Linux源码里面,一探究竟。 首先介绍下Linux环境 TIME_WAIT这个参数通常和五元组重用扯上关系。在这里,笔者先给出机器的内核参数设置,以免和其它问题相混淆。...但图中并没有指出2MSL到底是多长时间,但笔者从Linux源码里面翻到了下面这个宏定义。...Linux内核是通过时间轮来处理到期的TIME_WAIT socket,如下图所示: 内核将60s的时间分为8个slot(INET_TWDR_RECYCLE_SLOTS),每个slot处理7.5(...if (paws_reject) NET_INC_STATS_BH(twsk_net(tw), LINUX_MIB_PAWSESTABREJECTED); if (!

1.5K00

TCP ACK loop导致软中断高问题分析

因为node上运行这多个业务的Pod,首先找到导致软中断高的业务Pod, 会导致kernel处理timewait频繁一般就是产生的timewait数量多或者频率高。...排查Pod导致kernel处理timewait导致si高原因: (1)进入容器内通过netstat统计Pod产生的timewait socket的数量并不多: # netstat -tpne | grep...超时定时器,定时器被重置导致定时器无法触发超时回收timewait socket,这也是为什么ss可看到socket连接的timewait定时器时间一直在60s和59s之间切换的原因。...conntrack表找到其对应的客户端ip: cat /proc/net/nf_conntrack获取上游客户端IP 9.6.201.26: image.png 9.6.201.26是客户端机器,由于客户端用的非linux...9IBxn0CfMYUQRo-Q/ https://access.redhat.com/solutions/2725481 参考: https://www.wisdomjobs.com/e-university/linux-tutorial

1.6K50

解Bug之路-NAT引发的性能瓶颈

我们可以看看Linux关于TIME_WAIT处理的内核源码: switch (tcp_timewait_state_process(inet_twsk(sk), skb, th)) { // 如果是...状态的迁移就在于tcp_timewait_state_process这个函数,我们着重看下想要观察的分支: enum tcp_tw_status tcp_timewait_state_process(struct...|| th->ack) inet_twsk_schedule(tw, &tcp_death_row, TCP_TIMEWAIT_LEN, TCP_TIMEWAIT_LEN);...顺便吐槽一句 Linux TCP的实现对TIME_WAIT的处理用时间轮在笔者看来并不是什么高明的处理方式。 Linux本身对于Timer的处理本身就提供了红黑树这样的方案。...所幸在Linux 4.x版本中,摈弃了时间轮,直接使用Linux本身的红黑树方案。感觉自然多了! 关闭tcp_timestamps 笔者一开始并不想修改这个参数,因为修改意味着关闭PAWS校验。

80620

解Bug之路-NAT引发的性能瓶颈

我们可以看看Linux关于TIME_WAIT处理的内核源码: switch (tcp_timewait_state_process(inet_twsk(sk), skb, th)) { // 如果是...状态的迁移就在于tcp_timewait_state_process这个函数,我们着重看下想要观察的分支: enum tcp_tw_status tcp_timewait_state_process(struct...|| th->ack) inet_twsk_schedule(tw, &tcp_death_row, TCP_TIMEWAIT_LEN, TCP_TIMEWAIT_LEN);...顺便吐槽一句 Linux TCP的实现对TIME_WAIT的处理用时间轮在笔者看来并不是什么高明的处理方式。 Linux本身对于Timer的处理本身就提供了红黑树这样的方案。...所幸在Linux 4.x版本中,摈弃了时间轮,直接使用Linux本身的红黑树方案。感觉自然多了! 关闭tcp_timestamps 笔者一开始并不想修改这个参数,因为修改意味着关闭PAWS校验。

44600
领券