在我们的生产服务器(ubuntu 12.04,3.2.0-63 内核)上,路由缓存已达到其容量。修改rhash_entries
是不可能的,因为它是内核启动参数,并且我们无法重新启动服务器。
我们有什么选择?
机器有 8GB 内存(我知道,很少,但它是旧的......)。
的输出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
答案1
经过大量研究和阅读这篇精彩的文章我找到了临时解决方案:减少net.ipv4.route.gc_timeout
缓存中的条目可以更快地删除,并减少net.ipv4.route.gc_interval
垃圾收集器更频繁地运行。
但这些都是暂时的,因为在我们的机器上它只解决了几个小时的问题,而且更密集的垃圾收集占用了大量的 CPU。小心修改这些值——它们会毁掉你的机器。
增加rhash_entries
似乎是唯一的办法。