Linux中限制进程打开的最大文件描述符数量核心是RLIMIT_NOFILE,分进程软/硬限制、用户级总和限制、系统全局fs.file-max三层,实际生效取三者最严值;需同步配置limits.conf、systemd服务LimitNOFILE及sysctl.conf才能永久生效。

Linux 中限制进程打开的最大文件描述符数量,核心是控制 RLIMIT_NOFILE 这一资源限制。它分三层:单个进程的软/硬限制、用户级总和限制、系统全局上限。实际生效值取三者中最严的一个。
查看当前进程的文件描述符限制
在终端中运行以下命令即可快速确认:
-
ulimit -n:显示当前 shell 及其子进程的软限制(默认生效值) -
ulimit -Hn:显示硬限制(普通用户无法突破该值) -
ulimit -Sn:显示软限制(可临时提升,但不能超过硬限制) -
cat /proc/self/limits | grep "Max open files":从内核视角查看当前进程的实际限制
临时修改当前会话的限制
仅对当前终端及其启动的进程有效,退出即失效:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 设软硬限制均为 65535:
ulimit -n 65535 - 只设硬限制(需 root 或具备 CAP_SYS_RESOURCE 权限):
ulimit -Hn 65535 - 注意:普通用户只能降低硬限制或提升软限制至不超过硬限制的值
永久设置用户级限制(推荐方式)
适用于通过登录 shell 启动的服务(如 systemd user session、SSH 登录后运行的后台程序):
- 编辑
/etc/security/limits.conf,添加两行(以用户appuser为例):appuser soft nofile 65535appuser hard nofile 65535 - 确保 PAM 模块已启用:检查
/etc/pam.d/common-session是否包含session required pam_limits.so - 新登录会话才会生效;已有会话需重新登录,或用
su - appuser切换测试
补充:影响所有进程的系统级上限
即使单个进程调高了 ulimit -n,整个系统能分配的文件描述符总数仍受内核参数 fs.file-max 约束:
- 查看当前值:
cat /proc/sys/fs/file-max - 临时提高:
sudo sysctl -w fs.file-max=2097152 - 永久生效:在
/etc/sysctl.conf中追加一行fs.file-max = 2097152 - 该值应明显大于所有活跃进程的
nofile需求总和,避免出现 “Too many open files” 系统级报错

















