Linux: 配置最大打开文件数不同方式的作用域
已于 2025年11月21日 14:29 修改
访问次数:0
总结 Linux 最大打开文件数(max open files) 的完整配置方法,包括系统级、用户级、进程级三类。
✅ 1. 当前系统最大打开文件数(系统级)
查看系统级限制(所有进程总和):
cat /proc/sys/fs/file-max
这是整个系统允许同时打开的文件句柄(file descriptors)数量。
设置新的系统级限制(临时):
echo 2000000 > /proc/sys/fs/file-max
永久生效修改:
vim /etc/sysctl.conf
加入:
fs.file-max = 2000000
使其生效:
sysctl -p
✅ 2. 用户级最大打开文件数(soft/hard limit)
查看用户限制:
ulimit -n
ulimit -Hn
修改用户限制(针对每个用户),编辑:
vim /etc/security/limits.conf
添加:
* soft nofile 500000
* hard nofile 500000
或针对某个用户:
kafka soft nofile 500000
kafka hard nofile 500000
注意:必须重新登录 用户才能生效。
如果是 systemd 服务(比如 Kafka、MySQL、Nginx),需要同时修改 systemd。
✅ 3. systemd 服务最大打开文件数(非常重要)
systemd 会覆盖 limits.conf
需要在服务配置中加:
例子(修改 Kafka 服务):
vim /etc/systemd/system/kafka.service
加入:
LimitNOFILE=500000
加载 systemd 配置:
systemctl daemon-reload
systemctl restart kafka
查看是否生效:
cat /proc/$(pidof java)/limits | grep open
✅ 4. 进程级最大打开文件数
每个进程的 FD 限制在:
cat /proc/<pid>/limits
查看:
Max open files 500000 500000 files
⚠️ 常见问题总结
| 现象 | 原因 |
|---|---|
ulimit -n 修改后 systemd 服务不生效 | systemd 覆盖 limits.conf,需要用 LimitNOFILE= |
| file-max 很小导致系统报 "Too many open files" | /etc/sysctl.conf 未调整 |
| Kafka、Nginx 等服务 FD 不足 | 必须在 systemd 服务文件中额外配置 |
📌 推荐的生产环境配置(Kafka / ES / Redis 常用)
fs.file-max = 2000000
limits.conf:
* soft nofile 500000
* hard nofile 500000
systemd:
LimitNOFILE=500000
评论(0)