fs.file-max
参数总结
1. 定义与作用
- 定义:Linux 系统内核参数,用于限制全系统所有进程可打开的文件句柄(文件描述符)的最大数量。
- 核心作用:
- 防止文件句柄耗尽导致应用崩溃(如出现 “Too many open files” 错误)。
- 平衡系统内存资源:每个文件句柄需占用内存(约 1KB~4KB),避免过度分配导致内存不足。
2. 默认值与计算方式
- 动态计算:通常根据系统内存大小估算,公式为
file-max = (内存大小(KB)/10) * 2
。- 例:8GB 内存(8388608KB)默认约为 1677721。
- 不同发行版差异:
- Red Hat 等系统默认可能为 4096 或 65535,具体需通过命令查看。
3. 查看当前值
- 命令 1:通过
sysctl
查看sysctl -a | grep file-max # 示例输出:fs.file-max = 98240
- 命令 2:直接读取系统文件
cat /proc/sys/fs/file-max
4. 修改方法
- 临时修改(重启失效):
sysctl -w fs.file-max=新值 # 例:sysctl -w fs.file-max=2000000
- 永久修改:
- 编辑配置文件:
vi /etc/sysctl.conf
- 添加或修改参数:
fs.file-max = 新值 # 例:fs.file-max = 2000000
- 使配置生效:
sysctl -p
- 编辑配置文件:
5. 确定合适值的步骤
- 评估当前使用情况:
cat /proc/sys/fs/file-nr # 查看已分配/使用的句柄数 watch -d 'cat /proc/sys/fs/file-nr | cut -f2 -d" "' # 监控峰值
- 分析应用需求:
- 用
lsof -p <PID> | wc -l
查看单个进程句柄数,结合并发进程数估算总需求。
- 用
- 内存限制计算:
- 单个句柄约占 1KB~4KB,总内存需满足
fs.file-max * 单句柄内存 ≤ 系统空闲内存
。
- 单个句柄约占 1KB~4KB,总内存需满足
- 参考设置:
- 通用系统:物理内存的 1%~5%(如 8GB 内存设为 83886~419430)。
- 高并发服务器:500000~2000000(需结合内存测试)。
- 测试与调整:
- 先临时修改,通过
free -h
、vmstat
监控内存和负载,再永久配置。
- 先临时修改,通过
6. 注意事项
- 用户级限制:确保
ulimit -n
(用户句柄上限)不超过fs.file-max
,可修改/etc/security/limits.conf
。 - 避免过度配置:过大值可能导致内存浪费或系统不稳定,建议从 500000 开始逐步调整。