12 月 6 日 21:37 至 22:39,除 mirrors 外的 LUG 网络服务中断一小时。原因是权威 DNS 服务器挂掉了。原因又是 bind9 陷入死循环,触发 OOM kill。因此带来的不便,我们深表歉意。

由于我测试环境选择不当(用了挂了一台 LUG VPN 的主机),导致问题刚开始的半个小时没有发现问题根源,以为是 ns.ustc.edu.cn 取消了 LUG 域名的解析,于是给 jameszhang 打电话,过了一会儿 jameszhang 回电说是我们的权威 DNS 服务器挂了…… 当时 LUG 会长、DNS 专家 pudh 在校外,正在往回赶,而我手里没有登录 DNS 服务器的 key。最后是 CTO 崔灏救 LUG 于水火之中,把 DNS 服务器的 bind9 服务启动起来了。

QQ图片20141207001954

日志显示 bind9 是这时候开始陷入死循环的:


Dec  6 18:49:28 dns named[21839]: zone ustclug.org/IN/Default: sending notifies (serial 170002)
Dec  6 18:49:33 dns named[21839]: zone ustclug.org/IN/Default: sending notifies (serial 170028)
Dec  6 18:49:38 dns named[21839]: zone ustclug.org/IN/Default: sending notifies (serial 170054)
Dec  6 18:49:43 dns named[21839]: zone ustclug.org/IN/Default: sending notifies (serial 170080)
Dec  6 18:49:48 dns named[21839]: zone ustclug.org/IN/Default: sending notifies (serial 170106)
Dec  6 18:49:53 dns named[21839]: zone ustclug.org/IN/Default: sending notifies (serial 170132)

死循环在接近四小时后,最终撑爆了内存:


Dec  6 21:37:10 dns kernel: [9683698.772789] named invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0
Dec  6 21:37:10 dns kernel: [9683698.772793] named cpuset=/ mems_allowed=0
Dec  6 21:37:10 dns kernel: [9683698.772797] Pid: 21840, comm: named Not tainted 3.2.0-4-amd64 #1 Debian 3.2.60-1+deb7u3
...
Dec  6 21:37:10 dns kernel: [9683698.777831] Out of memory: Kill process 21839 (named) score 917 or sacrifice child
Dec  6 21:37:10 dns kernel: [9683698.777977] Killed process 21839 (named) total-vm:1523060kB, anon-rss:927256kB, file-rss:56kB

这个 OOM 的时间恰好是开始收到报警的时间,就是所有 LUG 域名无法解析的时间。