Linux: 配置最大打开文件数不同方式的作用域

总结 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)