部分低版本的Linux作業系統核心在回寫(writeback)檔案快取時,會出現softlockup異常。本文介紹問題原因與解決方案。
問題現象
在核心版本低於4.15的Linux執行個體中,核心回寫檔案快取時會出現softlockup異常,併產生與如下所述類似的調用棧資訊:
Linux核心版本可以通過uname -r命令查看,例如查看結果為3.10.0-514.26.2.el7.x86_64
,則其中的3.10.0
為核心版本。本文所述的4.15版本指4.15.0
版本。
[3507707.671883] [<ffffffff8127cf7a>] redirty_tail+0x3a/0x40
[3507707.671884] [<ffffffff81280ea4>] __writeback_inodes_wb+0x64/0xc0
[3507707.671885] [<ffffffff81281238>] wb_writeback+0x268/0x300
[3507707.671887] [<ffffffff812819f4>] wb_workfn+0xb4/0x380
[3507707.671889] [<ffffffff810a5dc9>] process_one_work+0x189/0x420
[3507707.671890] [<ffffffff810a625b>] worker_thread+0x1fb/0x4b0
[3507707.671891] [<ffffffff810a6060>] ? process_one_work+0x420/0x420
[3507707.671893] [<ffffffff810ac696>] kthread+0xe6/0x100
[3507707.671894] [<ffffffff810ac5b0>] ? kthread_park+0x60/0x60
[3507707.671897] [<ffffffff81741dd9>] ret_from_fork+0x39/0x50
問題原因
當執行個體中的記憶體緊缺時,系統核心會頻繁調用wakeup_flusher_threads
函數,調用該函數時會建立大量的回寫任務(wb_writeback_work
),從而導致回寫線程一直在處理回寫任務,最終引發系統softlockup異常。
解決方案
您需要把核心版本更新為高於4.15的版本以解決該問題。Alibaba Cloud Linux作業系統的核心版本均為4.19,不會出現該問題。以下解決方案主要適用於非Alibaba Cloud Linux作業系統的其他Linux發行版。
在操作前,建議您為ECS執行個體建立快照備份資料,避免因誤操作造成的資料丟失。建立快照的具體操作,請參見建立快照。
遠端連線Linux執行個體。
具體操作,請參見通過密碼或密鑰認證登入Linux執行個體。
運行以下命令查看核心版本資訊。
uname -r
如果核心版本不高於4.15,則需要運行以下命令更新核心版本。
如果核心版本高於4.15,則表示系統不會出現softlockup異常。您無需再進行後續操作。
yum update kernel
說明部分低版本的Linux核心如果無法通過
yum update kernel
命令更新核心版本,則需要您自行下載高於4.15版本的核心RPM包手動升級。更新核心版本後,需要重啟Linux執行個體。
reboot
待Linux執行個體重啟後,再次運行以下命令,確認核心版本已高於4.15。
uname -r