/proc/sys/fs/file-max 定義整個 Linux 核心願意分配的檔案控制代碼總上限。當出現 Too many open files in system 即需調大。Too many open files 或 Socket/File: Can't open so many files。# 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 最大值,不得超過此硬性上限。
inode-max,建議設為 file-max 的 4 倍。inode-max。# cat /proc/sys/fs/file-nr
128 0 185230
三欄含義:
file-max)RLIM_INFINITY 代表無限制。# 查看所有限制(預設顯示軟限制)
ulimit -a
# 查看硬限制
ulimit -Ha
# 設定檔案描述符軟/硬限制為 65535
ulimit -n 65535 # 同時設定軟硬
ulimit -Sn 65535 # 僅軟限制
ulimit -Hn 65535 # 僅硬限制
編輯啟動腳本 /usr/sbin/apachectl,修改 ULIMIT_MAX_FILES 變數。
若檔案描述符多為 TCP Socket,會佔用大量不可交換的核心記憶體(Socket buffer 等核心物件),導致系統記憶體壓力驟增。
另請記住:Socket 連線同樣消耗檔案描述符。