Linux内核崩溃分析。 被阻止的进程,IO和不可中断的等待

我有一个在CentOS 5.5平台上运行的多用户ERP应用程序。 硬件是HP ProLiant DL380 G6。 过去一年来这是一个稳定的体系,但过去一周出现了问题。 问题是系统负载在几个小时内逐渐上升到60+的水平。 系统保持响应,但在某些时候,HP ASR看门狗定时器会启动并重启服务器。

我在这个领域有很多这样的系统,但是之前没有这个特定的问题。 过去一周发生了四次车祸,但是今天早上我能够赶上它,直到系统完全没有响应。

这一次,我发现系统负载约为75,但有14个僵尸进程,我不能杀死。 PPID是1,所以我知道重新启动将是为了。 有趣的是,以下是dmesg输出的摘录,其中包含我在以前的崩溃中看不到的消息。 这些条目是什么意思? PID对应于我不能杀死的僵尸进程。 in.telnetd是特定用户会话的Telnet守护进程,而dbc是每个用户的ERP应用程序实例。

 INFO: task in.telnetd:12210 blocked for more than 600 seconds. "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. in.telnetd D ffff81000102e4a0 0 12210 8899 16297 12762 (L-TLB) ffff8103848d7d38 0000000000000046 ffff8108272c1738 ffff81082328ae80 ffff81082644d9c0 0000000000000009 ffff8102d8d7a080 ffff81011c9df100 00011ef007c2d74b 0000000000002358 ffff8102d8d7a268 0000000500000001 Call Trace: [<ffffffff80063c6f>] __mutex_lock_slowpath+0x60/0x9b [<ffffffff8003db0d>] lock_timer_base+0x1b/0x3c [<ffffffff80063cb9>] .text.lock.mutex+0xf/0x14 [<ffffffff8009dc66>] flush_workqueue+0x3f/0x87 [<ffffffff801a96ee>] release_dev+0x503/0x67b [<ffffffff800646f9>] __down_failed+0x35/0x3a [<ffffffff80225b40>] sock_destroy_inode+0x0/0x10 [<ffffffff800537af>] tty_release+0x11/0x1a [<ffffffff80012ad9>] __fput+0xd3/0x1bd [<ffffffff80023c39>] filp_close+0x5c/0x64 [<ffffffff80038f19>] put_files_struct+0x63/0xae [<ffffffff80015860>] do_exit+0x31c/0x911 [<ffffffff800491a7>] cpuset_exit+0x0/0x88 [<ffffffff8005d116>] system_call+0x7e/0x83 INFO: task dbc:9054 blocked for more than 600 seconds. "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. dbc D ffff810001036b20 0 9054 1 3272 1795 (L-TLB) ffff81028e0c3d38 0000000000000046 0000000000000000 00000000000001d0 0000000000000000 0000000000000009 ffff8107d60ff100 ffff81011c9ed080 00011edea224420a 00000000000ebaee ffff8107d60ff2e8 0000000600000000 Call Trace: [<ffffffff80063c6f>] __mutex_lock_slowpath+0x60/0x9b [<ffffffff8003db0d>] lock_timer_base+0x1b/0x3c [<ffffffff80063cb9>] .text.lock.mutex+0xf/0x14 [<ffffffff8009dc66>] flush_workqueue+0x3f/0x87 [<ffffffff801a96ee>] release_dev+0x503/0x67b [<ffffffff8837dd1d>] :xfs:xfs_free_eofblocks+0x9d/0x1fe [<ffffffff800537af>] tty_release+0x11/0x1a [<ffffffff80012ad9>] __fput+0xd3/0x1bd [<ffffffff80023c39>] filp_close+0x5c/0x64 [<ffffffff80038f19>] put_files_struct+0x63/0xae [<ffffffff80015860>] do_exit+0x31c/0x911 [<ffffffff800491a7>] cpuset_exit+0x0/0x88 [<ffffffff8006149d>] sysenter_do_call+0x1e/0x76 

这些消息意味着消耗所有可用的I / O。 这是由于(a)导致可用I / O为0的硬件(光盘/控制器/等)失效或(b)存在使用所有I / O的一个或多个过程。

有罪的过程可能不是在dmesg中列出的。 这是受害者。

因为我怀疑in.telnetd(除了:为什么你会telnetd运行?)触摸/数据,你有其他系统不经历的问题我猜c0d0是坏的或固件需要更新。

在其上运行HP Insight Diagnostics。 否则下一次发生的情况是看你是否可以运行iostat来查看光盘是否真的被淹没了。