症状:
图片云的slaver系统运行一段时间,突然应用的CPU USAGE上到9999,load飙上去,接着网络中断。重启后不开任何应用,init等的TIME已经是6位数的h了。启动应用马上像之前的情况了。
解决:
过程1: 这个是linux的kernel定时器相关bug,计算进程占用cpu时间出错了。但是具体跟什么东西有关就不清楚,因为所有的应用都是没有root权限的,不会破坏掉什么系统文件。
硬件,主板电池等均正常,系统log中也没有特殊报错。多方排查和规避尝试后,都无法解决,最后重装系统,问题解决了。
过程2: 另外一台机器运行到一段时间出现同样问题,,,只能继续解决,因为之前查资料是内核问题,因此先更换内核试试,运维同学帮忙下载最新内核3.2.14重编, 但是情况依旧。
过程3: 重装不是一劳永逸的方法,而且异地机房操作成本高,系统解决周期长,而且这个看上去不是个别现象。
既然是定时器问题,先检查定时器和帧频器,获取数据如下:
UserHZ 100
SystemHZ 1000000000
kernel timer interrupt frequency is approx. 4016 HZ。
用tsc来计数,sleep两秒:4000216988.000000,
均跟其它正常机器一致。
再次确认硬件和其读值操作没有问题。看看能否通过修改定时器来解决呢?
cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm
cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc
分别换了hpet和acpi_pm,均无法解决。
只能尝试jiffies,但是available_clocksource中并没有这个选项。
此时需要关闭acpi,关闭后就变成tsc 和jiffies,关闭apci和让系统默认定时器改成jiffies: acpi=off noapic notsc clocksource=jiffies
重启后init的时间正常,切换回2.6.32内核一样正常,启动应用,一切恢复正常。终于规避了此问题。
vi /boot/grub/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-358.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=3b0079e3-3e83-4877-acbd-87296efb4c6b rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet acpi=off noapic notsc clocksource=jiffies
initrd /initramfs-2.6.32-358.el6.x86_64.img
后续:
但是什么原因引起呢,而且重装OS后就OK了,很难说服自己是硬件问题。只能后续继续跟踪。