rh6.2 kernel panic 级别的 bug

线上已经稳定运行了半年多,一共遇到了两次不同的 kernel panic。以下的使用的是 6.2 的标准内核 2.6.32-220.el6.x86_64。

1. Kernel panic on divide-by-zero in get_dirty_limits
这个现象是在执行 reboot 之后,出现 panic,导致机器无法启动
这个在 vm.dirty_ratio 以及 vm_dirty_bytes 同时被置为 0 时,会出现 overflow,这个 private bug 目前还没 patch 出来(rhel 6.5 会修复这个 bug),比较好的方式是将 vm.dirty_ratio = 1。

2. kernel panic at nf_nat_setup_info
如果机器上部署了 SNAT 的话,就会中标。这个只能升级 kernel 到 2.6.32-220.30.1.el6 或者更高。在升级的过程中还遇到了一个小插曲。
由于完全进不了系统,只能通过 rescue mode 进行升级。进入之后:
# uname -a
Linux localhost.localdomain 2.6.32-220.el6.x86_64 #1 SMP Wed Nov 9 08:03:13 EST 2011 x86_64 x86_64 x86_64 GNU/Linux

将需要更新的 kernel* 上传到该机器上:
# ll kernel-*
-rw-r–r– 1 root root 26408880 Feb 25 11:15 kernel-2.6.32-279.el6.x86_64.rpm
-rw-r–r– 1 root root  7990420 Jun 15  2012 kernel-devel-2.6.32-279.el6.x86_64.rpm
-rw-r–r– 1 root root  9099056 Feb 25 11:09 kernel-firmware-2.6.32-279.el6.noarch.rpm
-rw-r–r– 1 root root  1988972 Feb 25 11:09 kernel-headers-2.6.32-279.el6.x86_64.rpm

安装:
# rpm -ivh *rpm
会出现如下的 error:
kernel-firmware-2.6.32-220.el6.x86_64 conflicts with file from package kernel-firmware-2.6.32-279.el6.x86_64

只有先覆盖原来的 firmware,再安装剩余的三个:
# rpm -Uvh kernel-firmware-2.6.32-279.el6.noarch.rpm
# rpm -ivh kernel-2.6.32-279.el6.x86_64.rpm kernel-devel-2.6.32-279.el6.x86_64.rpm kernel-headers.2.6.32-279.el6.x86_64.rpm

完成,检查确认:
# cat /etc/grub.conf
# rpm -qa | grep kernel

关于第二个 bug 还要再说几句,本来这个 bug 也不是个多大的事,SNAT 挂了顶多是内网的机器无法访问外网,悲剧的是,为了省事我们的 web server 跟 SNAT 部署在同一台机器上,更悲剧的是,当时紧急上线,web server 连个 failover 都没有,最后的结果就是我们的这台前端机器两天挂了六次,损失了 !@#$%^%。
总之教训就是,1)不要图省事。2)可以做 failover 的必须做。现在侥幸的迟早会出事。
单台硬件是不稳定的,单台软件也是不稳定的,但是两台同时宕的几率应该是小之又小了,除非发生了网络故障。

除了上面两个,还有个 2.6.32 都会发生的 208.5 day 的 bug,之前线上的 ubuntu 也遇到了这类悲剧,10.04 的可以升级到 2.6.32-38;rh 6.x 的可以升级到 kernel-2.6.32-279.el6

最后,我们的一个跑在 rh6.2 的 hadoop 集群曾经遇到过 sys time、load 高出正常水平的问题,究其原因,6.2 默认开启了 THP,关闭即可。

2 thoughts on “rh6.2 kernel panic 级别的 bug

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>