邻居表阈值是什么
net.ipv4.neigh.default.gc_thresh1、gc_thresh2、gc_thresh3 是邻居子系统回收的三个阈值,默认分别为 128、512、1024。邻居表存放 IP 与链路层地址的对应关系,也就是常说的 ARP 表。表项数量低于第一档时不会主动回收,超过第二档开始加快回收节奏,超过第三档则强制回收。同网段主机数量很大时表会被占满,内核打印 neighbor table overflow,之后的新建连接会出现间歇性异常。
基本信息
| 参数 | net.ipv4.neigh.default.gc_thresh1 与 gc_thresh2、gc_thresh3 |
|---|---|
| 默认值 | 128 / 512 / 1024 |
| 表满日志 | neighbour: neighbor table overflow! |
| 作用对象 | IPv4 邻居表,即 ARP 表项的总量 |
| 调整原则 | 三个阈值按同一比例放大,保持递增关系 |
| 观测入口 | ip neigh 查看当前表项数量与状态 |
典型使用场景
- 虚拟化与容器平台:同网段主机数量大,邻居表最容易触顶
- 排查间歇性连接异常:部分目标偶发不通,重试或等待后又自行恢复
- 负载均衡与网关:与大量后端或客户端处于同一网段
- 内核日志巡检:把表满告警纳入日常检查项
- 容量评估:按同网段主机数量估算所需的表容量
查看与调整
查看与调整
sysctl net.ipv4.neigh.default.gc_thresh1 net.ipv4.neigh.default.gc_thresh2 net.ipv4.neigh.default.gc_thresh3
ip neigh | wc -l # 当前邻居表项数量
dmesg -T | grep -i neighbour | tail # 查表满告警
sysctl -w net.ipv4.neigh.default.gc_thresh3=16384 # 先放大最高阈值(另两档同步)
ip neigh show dev eth0 | head # 查看具体表项与状态落盘与回读
落盘与回读
# /etc/sysctl.d/99-neigh.conf
net.ipv4.neigh.default.gc_thresh1 = 2048 # 低于它不主动回收
net.ipv4.neigh.default.gc_thresh2 = 8192 # 超过它加快回收节奏
net.ipv4.neigh.default.gc_thresh3 = 16384 # 超过它强制回收
# 回读命令:sysctl net.ipv4.neigh.default.gc_thresh3三个阈值读法
| 参数 | 含义 | 异常信号 |
|---|---|---|
| gc_thresh1 | 低于该值不主动回收 | 取值过小会让回收行为过于频繁 |
| gc_thresh2 | 超过该值加快回收节奏 | 与前后两档比例失衡会影响稳定性 |
| gc_thresh3 | 超过该值强制回收 | 表满告警出现说明这一档偏小 |
| 表项数量 | 当前邻居条目总数 | 长期贴近最高阈值时需要扩容 |
表满表现为间歇性连接异常:部分目标偶发不通,重试或等待后又恢复正常。排查应先在内核日志里找到表满证据,再核对表项数量与阈值的差距,而不是从应用侧盲目排查。
三个阈值需要整体调整:只抬高最高档会让回收策略失衡,中间档与低档仍在原位,回收节奏与新容量不匹配。容器与虚拟接口还会额外增加条目,估算时应一并考虑。