首页/系统/Linux 内核与性能调优速查/ipfrag_time 分片重组超时
网络栈调优98 条

ipfrag_time 分片重组超时

控制分片报文在重组队列中的保留时间; 大量游离分片占用内存时, 评估缩短保留时间。

ipfrag_time 是什么

ipfrag_time 控制 IP 分片报文在重组队列中最多保留多少秒。分片如果在超时前没能集齐,就会被丢弃并计入重组失败。大量游离分片会占用内核内存,缩短保留时间可以加快释放,但也更容易把到达较慢的合法分片误判为失败。多数分片问题的根因是路径 MTU,而不是这个超时值。

基本信息

参数名net.ipv4.ipfrag_time,单位为秒
文档默认值30 秒,实际以本机 sysctl 查询为准
查看命令sysctl net.ipv4.ipfrag_time
相关阈值net.ipv4.ipfrag_high_thresh 与 ipfrag_low_thresh 控制重组队列内存
相关计数/proc/net/snmp 的 Ip 段 ReasmTimeout、ReasmFails、ReasmReqds

典型使用场景

  • 排查分片重组失败计数持续增长的原因
  • 内存压力排查中确认重组队列的占用情况
  • 评估缩短保留时间能否缓解游离分片堆积
  • 验证 MTU 相关调整后重组失败计数是否下降
  • 建立内核参数基线时记录该值

查询与观察

查询与观察
sysctl net.ipv4.ipfrag_time                     # 查看当前保留时间
sysctl net.ipv4.ipfrag_high_thresh              # 重组队列内存上限
awk '/^Ip:/{print; getline; print}' /proc/net/snmp   # 查看重组相关计数
ip link show eth0 | grep mtu                    # 分片问题的根因常在 MTU

相关参数与计数

项目作用判读
ipfrag_time分片在重组队列中的最长保留秒数过短会导致合法分片被误丢
ipfrag_high_thresh重组队列占用的内存上限达到上限会丢弃新分片
ReasmTimeout因超时被丢弃的分片数增长说明分片无法按时集齐
ReasmFails重组失败总数结合 MTU 与链路质量分析

处置顺序

  • 先查路径 MTU 与分片情况,确认根因不在超时值上
  • 再看重组队列的内存水位,判断是否存在资源约束
  • 最后才考虑调整保留时间,并记录调整前后的计数变化
  • 调整写入配置文件,避免重启后回到默认值
分片重组失败绝大多数与路径 MTU 相关:与其调超时值,不如先确认各跳 MTU 是否一致、是否需要启用 MSS 钳制。
缩短保留时间会让重传或慢速到达的分片更容易被判为失败,可能把一个偶发问题变成持续问题,调整前要有明确指标依据。

易错点

  • 先改超时值再查 MTU,把根因忽略掉,问题反复出现
  • 只调 ipfrag_time 而不评估 ipfrag_high_thresh 等阈值,重组队列仍会溢出
  • 缩短保留时间过猛,导致正常分片被误丢,问题反而变严重
  • 改动不落盘,重启后参数回到默认值且无人察觉

数据来源与参考

  • Linux Documentation/networking/ip-sysctl.txt
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌