从Linux源码看TIME_WAIT状态的持续时间
对于Linux系统中TIME_WAIT状态的Socket,长久以来,源码人们普遍认为其持续时间大约是时间秒。然而,源码在实际线上环境中,时间aapt 源码Socket的源码TIME_WAIT状态有时会超过秒。这个问题源于一个复杂Bug的时间分析,促使我深入Linux源码进行探究。源码
首先,时间了解下我们的源码Linux环境配置,特别是时间tcp_tw_recycle参数,这对TIME_WAIT状态的源码vim分析源码处理至关重要。我们设定了tcp_tw_recycle为0,时间以避免NAT环境下的源码特定问题。
接下来,让我们通过TCP状态转移图来理解TIME_WAIT状态。理论上,它会保持2MSL(Maximum Segment Lifetime,起爆指标源码即最长报文段寿命)的时间。但具体时长并未在图中明确指出。在源码中,我发现了一个关键的宏定义TCP_TIMEWAIT_LEN,它定义了秒的销毁时间。
尽管之前我坚信秒的信息门户源码TIME_WAIT状态会被系统回收,但实际遇到的秒案例促使我重新审视内核对TIME_WAIT状态的处理。这个疑问将通过后续的博客分享答案。
深入源码,我们找到了TIME_WAIT定时器,它负责销毁过期的Socket。当Socket进入TIME_WAIT状态时,andrion 项目源码会触发特定的函数处理,如在不启用tcp_tw_recycle时,处理函数会直接调用inet_twsk_schedule。
内核通过时间轮机制管理TIME_WAIT状态,每个slot处理大约7.5秒的Socket。如果所有slot都被TIME_WAIT状态占用,可能会导致处理滞后。如果一个slot中的TIME_WAIT数量超过个,剩余的任务将交给work_queue处理,这会导致处理时间延长。
通过模拟,我们发现即使在slot处理完成后,整个周期可能已经过去了.5秒,这在NAT环境下可能导致问题。PAWS(Protection Against Wrapped Sequences)的保护机制可能会延长TIME_WAIT状态,使得Socket在特定情况下可以复用。
总的来说,对TIME_WAIT状态的深入理解需要避免刻板印象,因为实际情况可能因为复杂的机制而超出预想。在解决问题时,必须质疑既有的观点,这虽然艰难,但也是学习和成长的过程。
求一个简单的易语言源码,取系统运行时间的
月数不好定,因为每个月天数不一样。算到天就行了。
代码如下:
.版本 2
.支持库 spec
.子程序 _按钮1_被单击
.局部变量 运行时间, 整数型, , , 毫秒
运行时间 = 取启动时间 ()
调试输出 (取毫秒到天 (运行时间))
.子程序 取毫秒到天, 文本型
.参数 参_秒, 整数型
.局部变量 参_秒, 整数型
.局部变量 天, 整数型
.局部变量 小时, 整数型
.局部变量 分钟, 整数型
.局部变量 秒, 整数型
参_秒 = 取启动时间 () ÷
天 = 参_秒 ÷ ÷ ÷
小时 = (参_秒 - 天 × × ) ÷
分钟 = (参_秒 - 天 × × - 小时 × ) ÷
秒 = 参_秒 %
返回 (到文本 (天) + “天” + 到文本 (小时) + “小时” + 到文本 (分钟) + “分钟” + 到文本 (秒) + “秒”)
2024-11-30 11:58
2024-11-30 11:04
2024-11-30 11:02
2024-11-30 10:30
2024-11-30 10:05