全部產品
Search
文件中心

:Linux作業系統核心回寫時出現softlockup異常如何處理?

更新時間:Jun 19, 2024

部分低版本的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執行個體建立快照備份資料,避免因誤操作造成的資料丟失。建立快照的具體操作,請參見建立快照

  1. 遠端連線Linux執行個體。

  2. 運行以下命令查看核心版本資訊。

    uname -r
  3. 如果核心版本不高於4.15,則需要運行以下命令更新核心版本。

    如果核心版本高於4.15,則表示系統不會出現softlockup異常。您無需再進行後續操作。

    yum update kernel
    說明

    部分低版本的Linux核心如果無法通過yum update kernel命令更新核心版本,則需要您自行下載高於4.15版本的核心RPM包手動升級。

  4. 更新核心版本後,需要重啟Linux執行個體。

    reboot
  5. 待Linux執行個體重啟後,再次運行以下命令,確認核心版本已高於4.15。

    uname -r