Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 系統層級與進程層級檔案描述符限制完整設定指南

編輯:Linux 教學

核心概念區隔

  • file-max (系統層級):/proc/sys/fs/file-max 定義整個 Linux 核心願意分配的檔案控制代碼總上限。當出現 Too many open files in system 即需調大。
  • ulimit -n (進程層級):控制單一 Shell 會話及其衍生進程可同時開啟的檔案描述符數量。觸及上限會報 Too many open files 或 Socket/File: Can't open so many files。

一、系統層級 file-max 設定

查看目前值

# cat /proc/sys/fs/file-max
185230

臨時修改(重開機失效)

# echo 100000 > /proc/sys/fs/file-max

永久生效

# echo "fs.file-max=65535" >> /etc/sysctl.conf
# sysctl -p

注意:核心常數 NR_OPEN 限制 file-max 最大值,不得超過此硬性上限。

二、舊核心額外參數

  • Linux 2.2 需同步調整 inode-max,建議設為 file-max 的 4 倍。
  • Linux 2.4 及更新核心已移除 inode-max。

三、監控目前使用量:file-nr

# cat /proc/sys/fs/file-nr
128  0  185230

三欄含義:

  1. 已分配的檔案描述符數量
  2. 閒置的檔案控制代碼數量(新核心動態回收,通常為 0)
  3. 系統上限(同 file-max)

四、進程層級 ulimit 詳細操作

軟硬限制機制

  • 軟限制:核心強制執行的實際上限。
  • 硬限制:軟限制可調整的最大值。
  • 非特權進程:軟限制可在 0~硬限制間調整,且只能不可逆地降低硬限制。
  • 特權進程:可任意變更軟/硬限制。
  • RLIM_INFINITY 代表無限制。

常用指令

# 查看所有限制(預設顯示軟限制)
ulimit -a

# 查看硬限制
ulimit -Ha

# 設定檔案描述符軟/硬限制為 65535
ulimit -n 65535          # 同時設定軟硬
ulimit -Sn 65535         # 僅軟限制
ulimit -Hn 65535         # 僅硬限制

針對 Apache 等服務調整

編輯啟動腳本 /usr/sbin/apachectl,修改 ULIMIT_MAX_FILES 變數。

五、設定過大的潛在風險

若檔案描述符多為 TCP Socket,會佔用大量不可交換的核心記憶體(Socket buffer 等核心物件),導致系統記憶體壓力驟增。

另請記住:Socket 連線同樣消耗檔案描述符。

Copyright © Windows教程網 All Rights Reserved