Linux系统中不存在ip route flush cache命令,因内核2.6.30+已移除路由缓存机制,改用FIB查表;所谓“清缓存”无效且报错,正确做法是flush指定协议或表的路由、排查策略冲突及外部程序干扰。

Linux 系统中并没有 ip route flush cache 这个有效命令——这是常见的误解。ip route 命令不支持 flush cache 子命令,内核自 2.6.30+ 起已彻底移除路由缓存(routing cache)机制,取而代之的是基于 FIB(Forwarding Information Base)的高效哈希/trie 查表,它本身无传统意义的“可刷新缓存”。
所以,当遇到所谓“路由抖动”(如路由反复增删、策略路由异常、多路径切换失稳、策略冲突导致转发错误),清空“路由缓存”并不能解决问题,也根本无法执行。试图运行 ip route flush cache 会报错:RTNETLINK answers: No such file or directory 或 Command "flush" is unknown。
真正该做的,是排查和清理实际影响转发行为的路由状态:
✅ 正确应对路由抖动的操作方式
-
清空当前所有 IPv4 静态/动态添加的路由(不含内核自动生成的链路直连路由)
sudo ip route flush table main
注意:这会删除
main表中所有非proto kernel的路由(如static、boot、手动add的路由),但保留local、broadcast和直连网段(proto kernel scope link),不会断掉本机基础网络。
Skill Weave Chains — 技能链路由引擎下载开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
仅清除非内核来源的路由(更安全,推荐)
sudo ip route flush proto static sudo ip route flush proto boot sudo ip route flush proto dhcp
适用于由 NetworkManager、DHCP 客户端或脚本注入的异常静态路由引发的抖动。
-
重载策略路由表(若使用了
ip rule+ 自定义表)sudo ip route flush table 100 # 替换 100 为你的自定义表 ID sudo ip rule del table 100 sudo ip rule add table 100 # 重新加载规则(需配合配置)
-
检查并清除异常的 multipath(ECMP)路由条目
抖动常表现为同一目标出现多个nexthop且权重/状态不一致:ip route show 192.168.10.0/24 | grep -E 'nexthop|via' # 若发现失效下一跳,直接删整条: sudo ip route del 192.168.10.0/24
⚠️ 不要误操作的“伪缓存”
- ❌
route -C或ip route show cache:显示的是早已废弃的兼容接口,返回空或报错,无实际意义。 - ❌
echo 3 > /proc/sys/vm/drop_caches:清的是内存页缓存、inode/dentry,与路由完全无关,对网络转发无任何影响。 - ❌
systemd-resolve --flush-caches:只清 DNS 缓存,不是路由缓存。
? 辅助诊断抖动根源
- 实时监控路由变化:
watch -n 1 'ip route show table main | grep -v "proto kernel"'
- 查看路由更新日志(需开启内核 netlink 日志):
journalctl -u systemd-networkd -n 50 --no-pager | grep -i "route\|nexthop"
- 检查是否有进程频繁调用
netlink修改路由(如某些 SD-WAN、零信任客户端、自研路由守护进程)。
不复杂但容易忽略:路由抖动本质是路由策略不稳定或外部程序干扰,不是缓存积压。定位源头比盲目清空更重要。


















