Linux
伺服器凍結並突然負載變得非常高
我在 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 可以找到確切的原因。除此之外,它只是看到痕跡和猜測。