問題描述
當 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