我在 CentOS 5.7 上,并且我经常遇到服务器冻结的情况,日志显示以下输出:
Dec 26 18:33:51 server kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Dec 26 18:34:00 server init: Switching to runlevel: 6
Dec 26 18:34:00 server kernel: pdflush D 0000098C 2492 206 19 207 204 (L-TLB)
Dec 26 18:34:00 server kernel: f7c02e04 00000046 6e39208c 0000098c f138e27c 0000003b cee0e5c0 0000000a
Dec 26 18:34:00 server kernel: c35ff550 6e3a00e8 0000098c 0000e05c 00000001 c35ff65c c3419944 f7aca740
Dec 26 18:34:00 server kernel: 00000001 00000000 c041f0c8 00000000 0140f282 c042d86b f7f1e81c ffffffff
Dec 26 18:34:00 server kernel: Call Trace:
Dec 26 18:34:00 server kernel: [<c041f0c8>] __wake_up+0x2a/0x3d
Dec 26 18:34:00 server kernel: [<c042d86b>] getnstimeofday+0x30/0xb6
Dec 26 18:34:00 server kernel: [<c06242f8>] io_schedule+0x36/0x59
Dec 26 18:34:00 server kernel: [<c04586d2>] sync_page+0x0/0x3b
Dec 26 18:34:00 server kernel: [<c045870a>] sync_page+0x38/0x3b
Dec 26 18:34:00 server kernel: [<c062440a>] __wait_on_bit_lock+0x2a/0x52
Dec 26 18:34:00 server kernel: [<c045864d>] __lock_page+0x52/0x59
Dec 26 18:34:00 server kernel: [<c0437420>] wake_bit_function+0x0/0x3c
Dec 26 18:34:00 server kernel: [<c049811e>] mpage_writepages+0x135/0x308
Dec 26 18:34:00 server kernel: [<f8895bb6>] ext3_ordered_writepage+0x0/0x166 [ext3]
Dec 26 18:34:00 server kernel: [<c045d7b0>] do_writepages+0x2b/0x32
Dec 26 18:34:00 server kernel: [<c04968a7>] __writeback_single_inode+0x166/0x2a5
Dec 26 18:34:00 server kernel: [<c0496cca>] sync_sb_inodes+0x17e/0x221
Dec 26 18:34:00 server kernel: [<c0496f19>] writeback_inodes+0x6a/0xb0
Dec 26 18:34:00 server kernel: [<c045dbac>] background_writeout+0x71/0xc3
Dec 26 18:34:00 server kernel: [<c045e10f>] pdflush+0x0/0x1a1
Dec 26 18:34:00 server kernel: [<c045e21a>] pdflush+0x10b/0x1a1
Dec 26 18:34:00 server kernel: [<c045db3b>] background_writeout+0x0/0xc3
Dec 26 18:34:00 server kernel: [<c043732e>] kthread+0xc0/0xee
Dec 26 18:34:00 server kernel: [<c043726e>] kthread+0x0/0xee
Dec 26 18:34:00 server kernel: [<c0405c87>] kernel_thread_helper+0x7/0x10
Dec 26 18:34:00 server kernel: =======================
什么可能导致这些消息?我该如何解决这个问题?
答案1
可能有成千上万个原因。此 hung_task 参数自 RHEL 5.5 开始引入。
您不应该禁用它,否则您会错过重要的堆栈跟踪和调试选项。这里,它表明 ext3 文件系统中的页面写回存在一些问题,并且正在写入的页面已被锁定。负责写入页面的任务是 pdflush,它进入 D 状态,这意味着等待 IO 完成。在 IO 完成之前,它不能被中断,因为它处于 D 状态。当 pdflush 进入 D 状态时,服务器冻结是很自然的,因为它是负责将脏页写入磁盘的内核线程。
所以,可能的线索。你写入了太多脏数据,请检查你的内存状况。查找/proc/meminfo
以了解这一点。
如果您没有写入太多脏数据,那么可能是其他问题。堆栈跟踪除了这一点之外没有显示太多信息。您还有其他跟踪吗?
如果您有服务器支持,您可以这样做echo 1 > /proc/sys/kernel/hung_task_panic
。这将在下次挂起任务超时时创建一个 vmcore。您需要为此设置 kdump。按照 Red Hat 文章或任何受人尊敬的 Linux 博客来执行此操作。从 vmcore 中,可以找出确切的原因。除此之外,它只是查看跟踪并猜测事情。
答案2
检查一下 HDD 的智能。看起来文件系统或 HDD 的硬件有问题