Linux内核3.6+已彻底移除路由缓存,改用基于fib_trie的无状态FIB查找机制;因此ip route flush cache等命令和net.ipv4.route.max_size参数均不存在,仅保留IPv6相关的fib6_gc_thresh*调优参数。

Linux 内核中路由缓存(route cache)在较新内核(3.6+)已被彻底移除,取而代之的是基于 fib_trie 的无状态、按需查找的路由表机制。因此,“管理路由缓存表项大小与生命周期”这一操作在现代 Linux(如 5.x/6.x)中不再适用——系统没有独立的路由缓存区,也不再运行 GC 回收逻辑。
为什么找不到 route cache 相关命令或参数?
这是因为:
- ip route flush cache 和 /proc/sys/net/ipv4/route/max_size 等接口已在 3.6 内核中删除;
- net.ipv4.route.max_size 参数仅对 legacy route cache 生效,新内核直接忽略;
- 当前路由查找完全基于主路由表(FIB),所有条目都常驻内存,无“缓存命中/失效”概念。
实际要调优的是 FIB 表规模与 IPv6 路由垃圾回收
虽然路由缓存没了,但大规模路由场景下仍需关注两个关键控制点:
-
IPv6 路由条目回收阈值:通过
net.ipv4.fib6_gc_thresh1/2/3控制 IPv6 FIB 条目的轻量/中量/强制垃圾回收触发条件(单位:条目数)。默认值(128/512/1024)在含数千条 IPv6 路由的节点上易引发频繁 GC,建议按比例上调,例如:sysctl -w net.ipv4.fib6_gc_thresh1=1024sysctl -w net.ipv4.fib6_gc_thresh2=4096sysctl -w net.ipv4.fib6_gc_thresh3=8192 -
FIB 表膨胀防护:虽然无显式“缓存上限”,但可通过
net.ipv4.conf.all.forwarding=0关闭 IP 转发,减少内核维护的转发相关 FIB 条目(如本地生成的策略路由、martian 检查条目等)。
如何验证当前路由机制是否启用缓存?
执行以下命令确认:
-
cat /proc/sys/net/ipv4/route/max_size→ 若返回error: No such file or directory,说明内核已无 route cache; -
ip route show table local | head -5→ 所有输出均为真实 FIB 条目,非缓存快照; -
grep -r "fib6_gc" /proc/sys/net/ipv4/→ 仅显示 fib6_gc_* 类参数,印证仅 IPv6 有 GC 机制。
替代优化方向:提升 FIB 查找效率
既然没有缓存,就需让 FIB 查找本身更快:
- 精简冗余路由:用
ip route del清理重复、无效或未使用的条目; - 避免超长前缀泛滥:/32 主机路由过多会显著拖慢最长前缀匹配(LPM);
- 启用策略路由分流:将不同业务流量导向专用路由表,缩小单表规模;
- 确认内核启用
CONFIG_IP_ROUTE_MULTIPATH和CONFIG_IP_ROUTE_VERBOSE(影响调试与多路径支持)。



















