Linux 內核超時導致虛擬機無法正常啟動

問題描述

當 Linux 虛擬機啟動時,通過串口輸出或者啟動日志, 觀察到超時的報錯.導致虛擬機無法正常啟動和連接.

問題分析

常見的超時報錯范例如下:

復制

INFO: task swapper:1 blocked for more than 120 seconds.

Not tainted 2.6.32-504.8.1.el6.x86_64 #1

"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.

swapper? D 0000000000000000 0 1? 0 0x00000000

ffff88010f64fde0 0000000000000046 ffff88010f64fd50 ffffffff81074f95

0000000000005c2f ffffffff8100bb8e ffff88010f64fe50 0000000000100000

0000000000000002 00000000fffb73e0 ffff88010f64dab8 ffff88010f64ffd8

1. Call Trace:

[] ? __call_console_drivers+0x75/0x90

[] ? apic_timer_interrupt+0xe/0x20

[] ? vprintk+0x251/0x560

[] schedule_timeout+0x192/0x2e0

[] ? process_timeout+0x0/0x10

[] schedule_timeout_uninterruptible+0x1e/0x20

[] msleep+0x20/0x30

[] prepare_namespace+0x30/0x1a9

[] kernel_init+0x2e1/0x2f7ls

[] child_rip+0xa/0x20

[] ? kernel_init+0x0/0x2f7

[] ? child_rip+0x0/0x20

上述報錯描述了系統(tǒng)任務在等待 IO 超過 120 秒以后, 依舊沒有得到響應,導致該任務被阻止. IO 超時未響應的原因, 有多種: 磁盤下線、 存儲有嚴重的延遲、 磁盤陣列(RAID)工作異常, 或者 Linux 虛擬機本身的 CPU 和內存資源不足都會導致 IO 超時.

解決方案

方案一:

最快速的嘗試是通過 Azure 門戶重啟該虛擬機,大部分問題可以得到解決.

方案二:

如果方案一依然無法解決連接的問題, 建議您選擇刪除虛擬機保留磁盤, 然后基于該磁盤新建虛擬機.修改內核參數(shù):

注: 以下方案僅適用于 CentOS 和 RHEL,其他版本 Linux 略有不同, 僅供參考.如果業(yè)務生產對內核參數(shù)嚴格要求的, 請參考相關參數(shù)的說明, 酌情進行修改配置.

編輯/etc/sysctl.conf增加(修改以下參數(shù)):

復制

vm.dirty_background_ratio = 5

vm.dirty_ratio = 10

保存并退出.

執(zhí)行命令是上述改動立即生效:

復制

sysctl -p

如果上述兩個方案依然無法解決問題, 請及時聯(lián)系 Azure 技術支持中心,獲取更深入的支持和幫助.

立即訪問http://market.azure.cn

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容