温馨提示×

debian ulimit文件数限制

小樊
39
2026-09-16 02:55:43
栏目: 智能运维

在 Debian 系统中,文件数限制(open files / file descriptors)通常由 ulimit 和系统级配置共同控制。下面从查看、临时修改、永久修改、系统级限制几个方面说明。


一、查看当前限制

1. 查看当前 shell 的限制

ulimit -n

显示的是当前用户可打开的最大文件数(软限制)。

查看所有限制:

ulimit -a

2. 查看系统级限制

cat /proc/sys/fs/file-max

这是整个系统可分配的文件描述符总数。

查看当前已使用:

cat /proc/sys/fs/file-nr

二、临时修改(仅当前会话)

ulimit -n 65536

⚠️ 注意:

  • 只能调大不能调小(受硬限制约束)
  • 重启或新开 shell 后失效

查看硬限制:

ulimit -Hn

三、永久修改用户级限制(推荐)

方法 1:修改 /etc/security/limits.conf

sudo vim /etc/security/limits.conf

示例(针对所有用户或指定用户):

* soft nofile 65536
* hard nofile 65536

或指定用户:

www-data soft nofile 65536
www-data hard nofile 65536

✅ 需要满足条件:

  • 使用 PAM(Debian 默认启用)
  • 登录方式支持 PAM(SSH / 控制台 / su)

方法 2:systemd 服务(非常重要)

如果是 systemd 管理的服务(如 nginx、mysql、docker),limits.conf 可能不生效

针对单个服务

sudo systemctl edit nginx

添加:

[Service]
LimitNOFILE=65536

然后:

sudo systemctl daemon-reload
sudo systemctl restart nginx

全局 systemd 限制

sudo vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536

四、系统级文件数限制

修改系统最大文件数

sudo vim /etc/sysctl.conf
fs.file-max = 2097152

生效:

sudo sysctl -p

五、常见问题排查

1. 修改后不生效?

  • 是否是 systemd 服务
  • 是否重新登录
  • 是否修改的是硬限制

2. 查看某进程的限制

cat /proc/<pid>/limits

3. Docker 容器

Docker 默认继承宿主机,但可显式设置:

ulimits:
  nofile:
    soft: 65536
    hard: 65536

六、推荐生产配置示例

# /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536

# /etc/systemd/system.conf
DefaultLimitNOFILE=65536

# /etc/sysctl.conf
fs.file-max = 2097152

如果你能说明:

  • 普通用户 / 服务 / Docker
  • Debian 版本(如 11 / 12)

我可以给你更精确的配置方案。

0