萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 文件句柄限制調優完整指南:ulimit 用戶級配置、limits.conf 永久生效、軟硬限制機制、系統級 file-max 與 lsof 排查實戰

問題背景

伺服器部署應用遇到 Socket/File: Can't open so many files 錯誤。Linux 對文件句柄(file descriptor)有限制,預設 **1024**,生產環境極易耗盡。

查看當前限制

ulimit -a
# open files (-n) 1024

此為**當前用戶啟動程序的限制**,非系統全域限制。

ulimit 限制三大關鍵特性

  1. 針對**單一程序**的限制
  2. 修改**不影響**已運行程序
  3. 命令列修改**退出 Shell 即失效**

例:啟動程式 A → ulimit -n 2048 → 啟動程式 B → 退出 Shell 重登 → 啟動程式 C。結果:**僅程式 B 享有 2048 句柄額度**。

永久修改:/etc/security/limits.conf(正解)

將 ulimit 放入 /etc/profile **非最佳做法**。正確修改 /etc/security/limits.conf:

* soft nofile 2048
* hard nofile 32768

所有用戶軟限制 2048,硬限制 32768。首欄 * 表全域,可針對特定用戶差異化配置。

軟限制 vs 硬限制

類型含義
硬限制實際上限,程序無法超越
軟限制警告線,達到收到警告但可繼續增至硬限制

ulimit -H 設硬限、-S 設軟限。無參數修改時軟硬同改。預設顯示軟限制。

生效驗證

修改後**重新登入**即時生效。已啟動程序需**重啟**套用新值(部分發行版需重開機)。

系統全域限制:/proc/sys/fs/

  • file-max:系統全域可開啟句柄最大數(cat 查看、echo 值 > file-max 立即修改)
  • file-nr:唯讀,顯示系統當前已使用句柄數

排查神器:lsof

  • 查看某進程開啟哪些句柄:lsof -p PID
  • 查看某檔案/目錄被誰佔用:lsof /path/to/file

排查句柄洩漏、佔用異常的利器。

copyright © 萬盛學電腦網 all rights reserved