執行 Ubuntu 10.04 的 Xen PV 客戶機上與 IO 相關的鎖定
我有一個 Xen PV 來賓,執行 Ubuntu 10.04。我不執行底層主機。核心是 Ubuntu 提供的庫存:
Linux nephos 2.6.32-21-server #32-Ubuntu SMP Fri Apr 16 09:17:34 UTC 2010 x86_64 GNU/Linux
機器伺服器作為 LAMP Web/DB 伺服器,帶有我們內部開發的一堆 perl Web 應用程序。由於我們在星期一早上上線並讓我們的使用者在機器上放鬆,可靠地每天一次它進入了我們無法從命令行重新啟動它的狀態,CGI 腳本變得無響應,ping 時間迅速增加,甚至
ls
某些目錄(可能是正在等待寫入的目錄)中的命令失敗。
top
顯示了許多處於 state 的程序D
,大多命名為fleet.cgi
ordoc.pl
,它們是我們的應用程序。嘗試kill
或kill -9
這些過程靜默失敗。sudo reboot
返回,聲稱機器即將停機,但從未將廣播消息發送給其他 shell 使用者它將這樣做,也不會重新啟動機器。當機器開始鎖定時,syslog 中會出現如下行:
Dec 14 12:05:45 nephos kernel: [71040.150212] INFO: task mysqld:2708 blocked for more than 120 seconds. Dec 14 12:05:45 nephos kernel: [71040.150234] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. Dec 14 12:05:45 nephos kernel: [71040.150247] mysqld D ffff880002d4dbc0 0 2708 1 0x00000000 Dec 14 12:05:45 nephos kernel: [71040.150256] ffff8800fa5e9918 0000000000000286 0000000000015bc0 0000000000015bc0 Dec 14 12:05:45 nephos kernel: [71040.150264] ffff8800ec5883c0 ffff8800fa5e9fd8 0000000000015bc0 ffff8800ec588000 Dec 14 12:05:45 nephos kernel: [71040.150272] 0000000000015bc0 ffff8800fa5e9fd8 0000000000015bc0 ffff8800ec5883c0 Dec 14 12:05:45 nephos kernel: [71040.150280] Call Trace: Dec 14 12:05:45 nephos kernel: [71040.150309] [<ffffffff8116d1d0>] ? sync_buffer+0x0/0x50 Dec 14 12:05:45 nephos kernel: [71040.150320] [<ffffffff815555c7>] io_schedule+0x47/0x70 Dec 14 12:05:45 nephos kernel: [71040.150325] [<ffffffff8116d215>] sync_buffer+0x45/0x50 Dec 14 12:05:45 nephos kernel: [71040.150330] [<ffffffff81555a9a>] __wait_on_bit_lock+0x5a/0xc0 Dec 14 12:05:45 nephos kernel: [71040.150334] [<ffffffff8116d1d0>] ? sync_buffer+0x0/0x50 Dec 14 12:05:45 nephos kernel: [71040.150339] [<ffffffff81555b78>] out_of_line_wait_on_bit_lock+0x78/0x90 Dec 14 12:05:45 nephos kernel: [71040.150347] [<ffffffff81084fe0>] ? wake_bit_function+0x0/0x40 Dec 14 12:05:45 nephos kernel: [71040.150353] [<ffffffff8116c1e7>] ? __find_get_block_slow+0xb7/0x130 Dec 14 12:05:45 nephos kernel: [71040.150357] [<ffffffff8116d396>] __lock_buffer+0x36/0x40 Dec 14 12:05:45 nephos kernel: [71040.150365] [<ffffffff81212164>] do_get_write_access+0x554/0x5d0 Dec 14 12:05:45 nephos kernel: [71040.150369] [<ffffffff8116cb57>] ? __getblk+0x27/0x50 Dec 14 12:05:45 nephos kernel: [71040.150374] [<ffffffff81212371>] journal_get_write_access+0x31/0x50 Dec 14 12:05:45 nephos kernel: [71040.150381] [<ffffffff811c5f9d>] __ext3_journal_get_write_access+0x2d/0x60 Dec 14 12:05:45 nephos kernel: [71040.150386] [<ffffffff811b7c7b>] ext3_reserve_inode_write+0x7b/0xa0 Dec 14 12:05:45 nephos kernel: [71040.150392] [<ffffffff8155748e>] ? _spin_unlock_irqrestore+0x1e/0x30 Dec 14 12:05:45 nephos kernel: [71040.150396] [<ffffffff811b7ccb>] ext3_mark_inode_dirty+0x2b/0x50 Dec 14 12:05:45 nephos kernel: [71040.150401] [<ffffffff811b7e71>] ext3_dirty_inode+0x61/0xa0 Dec 14 12:05:45 nephos kernel: [71040.150406] [<ffffffff81165c22>] __mark_inode_dirty+0x42/0x1e0 Dec 14 12:05:45 nephos kernel: [71040.150412] [<ffffffff81159f8b>] file_update_time+0xfb/0x180 Dec 14 12:05:45 nephos kernel: [71040.150422] [<ffffffff810f5300>] __generic_file_aio_write+0x210/0x470 Dec 14 12:05:45 nephos kernel: [71040.150430] [<ffffffff8114f49d>] ? __link_path_walk+0xad/0xf80 Dec 14 12:05:45 nephos kernel: [71040.150435] [<ffffffff810f55cf>] generic_file_aio_write+0x6f/0xe0 Dec 14 12:05:45 nephos kernel: [71040.150441] [<ffffffff8114311a>] do_sync_write+0xfa/0x140 Dec 14 12:05:45 nephos kernel: [71040.150446] [<ffffffff81084fa0>] ? autoremove_wake_function+0x0/0x40 Dec 14 12:05:45 nephos kernel: [71040.150453] [<ffffffff8100f392>] ? check_events+0x12/0x20 Dec 14 12:05:45 nephos kernel: [71040.150461] [<ffffffff81250946>] ? security_file_permission+0x16/0x20 Dec 14 12:05:45 nephos kernel: [71040.150466] [<ffffffff81143418>] vfs_write+0xb8/0x1a0 Dec 14 12:05:45 nephos kernel: [71040.150470] [<ffffffff81143db2>] sys_pwrite64+0x82/0xa0 Dec 14 12:05:45 nephos kernel: [71040.150477] [<ffffffff810131b2>] system_call_fastpath+0x16/0x1b
我已經安裝了 Ubuntu 軟體包
linux-virtual
以確保我安裝了合適的核心,但我目前擁有的核心已經滿足了它的依賴關係。我真的有點不知所措。在正常負載下沒有出現任何異常情況iotop
,但同樣我不知道使用率突然增加會觸發故障——也就是說,機器已經執行這些應用程序了幾週,只有 1/2 的測試使用者,而且只有現在失敗了,十幾個人整天都在打他們。我只需要一台具有更好 IO 功能的機器(或減少我的應用程序對它的需求)還是我可以通過一些調整來解決這個問題?
*更新於 2010 年 12 月 15 日 23:41:*如果有幫助(我懷疑這是一個關鍵細節),來賓正在半虛擬化下執行。
來自 Red Hat bugzilla,進一步表明關閉 irqbalance 可能是解決方法,並且在 2.6.32.22 中進行了修復
https://bugzilla.redhat.com/show_bug.cgi?id=550724#c81(評論 81 到 91)
評論 91 連結到 2.6.32.22 的發行說明(內聯搜尋 xen)