Linux

伺服器凍結並突然負載變得非常高

  • December 26, 2012

我在 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:  =======================

什麼會導致這些消息?我該如何解決這個問題?

可能是由於成千上萬的原因。從 RHEL 5.5 開始引入了這個 hang_task 參數。

你不應該禁用它,你會錯過重要的堆棧跟踪和調試選項。在這裡,它表明 ext3 文件系統中的頁面寫回存在一些問題,並且正在寫入的頁面被鎖定。負責寫頁面的任務是pdflush,進入D狀態,表示等待IO完成。在 IO 完成之前,它不能被中斷,因為它處於 D 狀態。當 pdflush 進入 D 狀態時,伺服器的凍結是很自然的,因為它是負責將臟頁寫入磁碟的核心執行緒。

所以,可能的線索。您正在寫入太多髒數據,請檢查您的記憶體狀況。找到/proc/meminfo就知道了。

如果您沒有寫入太多髒數據,則可能是其他問題。堆棧跟踪除此之外沒有其他任何指示。有沒有其他痕跡。

如果您有伺服器支持,您可以這樣做echo 1 > /proc/sys/kernel/hung_task_panic。這將在下次達到掛起任務超時時創建一個 vmcore。您需要為此設置 kdump。按照 Red Hat 文章或任何受人尊敬的 linux 部落格來執行此操作。從 vmcore 可以找到確切的原因。除此之外,它只是看到痕跡和猜測。

引用自:https://serverfault.com/questions/461007