无需重启即可修复“路由哈希链太长”

er4*_*53r 5 networking routing cache

在我们的生产服务器(ubuntu 12.04,3.2.0-63 内核)上,路由缓存达到了它的容量。修改rhash_entries是不可能的,因为它是内核引导参数,我们不能重启服务器。

我们有哪些选择?

机器有 8GB 如果 ram(我知道,很少,但它是旧的......)。

输出grep . /proc/sys/net/ipv4/route/*看起来像这样:

/proc/sys/net/ipv4/route/error_burst:1250
/proc/sys/net/ipv4/route/error_cost:250
/proc/sys/net/ipv4/route/gc_elasticity:1
/proc/sys/net/ipv4/route/gc_interval:60
/proc/sys/net/ipv4/route/gc_min_interval:0
/proc/sys/net/ipv4/route/gc_min_interval_ms:0
/proc/sys/net/ipv4/route/gc_thresh:262144
/proc/sys/net/ipv4/route/gc_timeout:300
/proc/sys/net/ipv4/route/max_size:4194304
/proc/sys/net/ipv4/route/min_adv_mss:256
/proc/sys/net/ipv4/route/min_pmtu:552
/proc/sys/net/ipv4/route/mtu_expires:600
/proc/sys/net/ipv4/route/redirect_load:5
/proc/sys/net/ipv4/route/redirect_number:9
/proc/sys/net/ipv4/route/redirect_silence:5120
Run Code Online (Sandbox Code Playgroud)

er4*_*53r 1

经过大量研究和阅读这篇精彩的文章后,我找到了临时解决方案:减少net.ipv4.route.gc_timeout缓存中的条目可以更快地删除,减少net.ipv4.route.gc_interval垃圾收集器可以更频繁地运行。

但这些都是暂时的,因为在我们的机器上它只解决了几个小时的问题,而且更密集的垃圾收集占用了大量的 CPU。小心修改这些值——它们会毁掉你的机器。

增加rhash_entries似乎是唯一的办法。