全部產品
Search
文件中心

:調整Linux執行個體的nofile參數後,遠端連線失敗或提示“Too many open files”錯誤怎麼辦?

更新時間:Dec 20, 2025

問題現象

  • 遠端連線失敗

    • 通過 SSH 或Workbench 遠端連線執行個體時,串連被拒絕或逾時,無法建立會話。

    • 通過 VNC 登入,輸入正確的使用者名稱和密碼後提示“System error”,無法登入。

  • 業務程式運行異常:

    應用日誌或命令列輸出“Too many open files”錯誤。image

問題原因

nofile 資源限制過嚴/etc/security/limits.conf 檔案中的 nofile 參數值決定每個進程可開啟檔案數量上限,若設定過小,單進程所需開啟檔案數量超出此限制,將提示無法開啟更多檔案或直接拒絕登入。

操作步驟

若可登入,可直接修改配置;若已無法登入,則需要通過掛載系統硬碟方式修複。

可登入執行個體

  1. 使用root使用者登入ECS執行個體。

    1. 訪問ECS控制台-執行個體。在頁面左側頂部,選擇目標資源所在的資源群組和地區。

    2. 進入目標執行個體詳情頁,單擊遠端連線,選擇通過Workbench遠端連線。根據頁面提示使用root使用者登入,進入終端頁面。

  2. 修改設定檔。

    編輯/etc/security/limits.conf檔案,修改hard nofilesoft nofile參數值為預設的65535後,儲存並退出。

    * soft nofile 65535
    * hard nofile 65535
    root soft nofile 65535
    root hard nofile 65535
    • 代表所有普通使用者,root 代表 root 使用者。

    • hard nofile:檔案開啟數的硬性上限,該值不能超過核心參數/proc/sys/fs/nr_open 的限制,否則可能導致執行個體登入失敗。

    • soft nofile:當前可開啟的檔案數限制,該值不得超過hard nofile ,否則配置將被忽略。

      若設定的soft nofile大於hard nofile,實際生效的nofile值為hard nofile參數值。
  3. 使配置生效。

    1. 退出並使用目標使用者重新登入ECS執行個體,使配置生效。

    2. 使用sudo ulimit -n,輸出為65535,表示nofile 已更新。

  4. 重啟並運行相關業務程式,確認功能恢複正常。

無法登入執行個體

重要

若系統硬碟存在歷史快照,建議建立快照備份當前資料後,優先利用歷史快照復原系統硬碟,然後驗證恢複正常。

若無歷史快照,則需準備一台與故障執行個體在同一可用性區域的正常Linux執行個體,通過掛載系統硬碟的方式更改nofile參數。

  1. 卸載系統硬碟。

    確保異常執行個體狀態為已停止,執行以下操作:

    1. 為防止誤操作導致資料丟失,建議對系統硬碟建立快照,備份當前資料。

    2. 訪問ECS控制台-執行個體。在頁面左側頂部,選擇目標資源所在的資源群組和地區。

    3. 單擊異常執行個體ID進入執行個體詳情頁後,切換至Block Storage頁簽。

    4. 系統硬碟操作列選擇更多 > 卸載

    5. 卸載雲端硬碟對話方塊中確認資訊,單擊確定卸載。當執行個體狀態顯示無系統硬碟時,表示卸載成功。

  2. 作為資料盤掛載至正常執行個體。

    確保正常執行個體狀態為運行中,執行以下操作:

    1. 掛載異常系統硬碟至正常執行個體。

      1. 單擊正常執行個體ID進入執行個體詳情頁。

      2. 切換至Block Storage頁簽後,單擊掛載雲端硬碟

      3. 掛載到執行個體頁面的目標盤中,選擇已卸載的異常系統硬碟,單擊下一步

      4. 分區及建立檔案系統並掛載介面,選擇稍後設定,完成掛載。

    2. 單擊遠端連線,選擇通過Workbench遠端連線。根據頁面提示使用root使用者登入,進入終端頁面。

    3. 掛載檔案系統。

      1. 確定故障盤分區名稱。

        lsblk -f
        vda                                                      
        ├─vda1                                                   
        ├─vda2 vfat         7938-FA03                            /boot/efi
        └─vda3 ext4   root  33b46ac5-7482-4aa5-8de0-60ab4c3a4c78 /
        vdb                                                      
        ├─vdb1                                                   
        ├─vdb2 vfat         7938-FA03                            
        └─vdb3 ext4   root  33b46ac5-7482-4aa5-8de0-60ab4c3a4c78                                  

        樣本中,故障盤vdb的根分區為vdb3需掛載,各分區含義如下:

        • vdb1/vdb2:存放系統啟動相關程式,可忽略。

        • vdb3:存放作業系統檔案和資料,需掛載。

      2. 建立目錄並掛載檔案系統。

        mkdir <掛載目錄> && sudo mount /dev/<分區名稱> <掛載目錄>

        參數

        說明

        <分區名稱>

        替換為上一步確定的故障盤的根分區名稱。

        <掛載目錄>

        自訂<掛載目錄>,應為以/開頭的空路徑,可自訂但不可重複。

        重要

        若目錄非空,原目錄下檔案將被隱藏導致無法讀取,請謹慎評估。

        以將目標資料分割vdb1掛載至新建立的/test為例,需執行mkdir /test && sudo mount /dev/vdb3 /test
      3. 檢查檔案系統掛載結果。

        運行lsblk命令,若目標資料分割存在掛載目錄(MOUNTPOINT),表示檔案系統掛載成功。

  3. 修改設定檔。

    編輯<掛載目錄>/etc/security/limits.conf檔案,修改hard nofilesoft nofile參數值為預設的65535後,儲存並退出。

    * soft nofile 65535
    * hard nofile 65535
    root soft nofile 65535
    root hard nofile 65535
    • 代表所有使用者,root 代表 root 使用者。

    • hard nofile:檔案開啟數的硬性上限,該值不能超過核心參數<掛載目錄>/proc/sys/fs/nr_open 的限制,否則可能導致執行個體登入失敗。

    • soft nofile:當前可開啟的檔案數限制,該值不得超過hard nofile ,否則配置將被忽略。

      若設定的soft nofile大於hard nofile,實際生效的nofile值為hard nofile參數值。
  4. 作為系統硬碟掛載回異常ECS執行個體。

    1. 卸載檔案系統。

      <掛載目錄>需替換為實際的掛載路徑

      umount <掛載目錄>
      樣本需執行umount /test
    2. 卸載修複後的系統硬碟。

      1. 返回ECS控制台,進入正常執行個體詳情頁的Block Storage頁簽。

      2. 單擊修複後的系統硬碟操作列的卸載

      3. 卸載雲端硬碟介面,單擊確定卸載

    3. 將修複後的系統硬碟掛載回源執行個體。

      1. 進入異常執行個體詳情頁的Block Storage頁簽,單擊掛載雲端硬碟

      2. 掛載到執行個體頁面的目標盤中,選擇修複後的系統硬碟,配置登入憑證後,單擊下一步

      3. 分區及建立檔案系統並掛載介面,選擇稍後設定,完成掛載。

    4. 啟動ECS執行個體。

  5. 登入異常ECS執行個體,查看是否正常。

後續建議

  • 謹慎操作核心系統檔案:在修改核心系統檔案前,請務必建立快照備份資料,並確認操作的必要性和潛在風險。切勿輕易修改不熟悉的系統參數。

  • 監控警示:為保障關鍵業務系統的穩定性與安全性,建議在所有核心執行個體上部署ulimit -n 配置檢查機制。通過定期檢測 ulimit -n 的實際運行值及其期望配置的一致性,確保系統資源限制設定符合預期標準,及時發現並預警異常修改行為。