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 钳制。
缩短保留时间会让重传或慢速到达的分片更容易被判为失败,可能把一个偶发问题变成持续问题,调整前要有明确指标依据。