温馨提示×

Debian ulimit修改后如何生效

小樊
40
2026-07-12 00:15:44
栏目: 智能运维

在 Debian(以及大多数 Linux 发行版)中,ulimit 的修改生效方式取决于你修改的位置和场景。下面按常见情况说明。


一、当前 shell 会话立即生效

如果你只是在当前终端里修改:

ulimit -n 65535
ulimit -u 4096

立即生效
只对该 shell 及其子进程有效
关闭终端或重新登录后失效

查看当前限制:

ulimit -a

二、对某个用户永久生效(推荐)

1️⃣ 使用 /etc/security/limits.conf

编辑:

sudo vim /etc/security/limits.conf

添加或修改:

* soft nofile 65535
* hard nofile 65535
* soft nproc 4096
* hard nproc 4096

说明:

  • soft:当前生效值
  • hard:上限
  • nofile:打开文件数
  • nproc:进程数

⚠️ 注意

  • * 对所有用户生效
  • root 可能不生效,需单独写:
root soft nofile 65535
root hard nofile 65535

2️⃣ 确保 PAM 启用 limits

检查:

grep pam_limits /etc/pam.d/common-session

如果没有,添加:

session required pam_limits.so

3️⃣ 重新登录(关键)

修改后 必须重新登录

logout
# 或
ssh user@host

⚠️ 重启服务 / 重启系统不是必须,但重新登录是必须的


三、systemd 服务(非常重要)

如果你发现:

修改了 limits.conf,但服务(如 Nginx、MySQL)不生效

原因是:systemd 不读取 limits.conf

解决方法(二选一)

✅ 方法 1:修改 systemd service 文件

sudo systemctl edit nginx

写入:

[Service]
LimitNOFILE=65535
LimitNPROC=4096

然后:

sudo systemctl daemon-reload
sudo systemctl restart nginx

✅ 方法 2:全局 systemd 限制

编辑:

sudo vim /etc/systemd/system.conf
DefaultLimitNOFILE=65535
DefaultLimitNPROC=4096

然后重启系统。


四、Docker / 容器环境

Docker 默认限制较低,需显式指定:

docker run --ulimit nofile=65535:65535 --ulimit nproc=4096:4096

或在 docker-compose.yml

ulimits:
  nofile:
    soft: 65535
    hard: 65535

五、验证是否生效

当前 shell

ulimit -n
ulimit -u

systemd 服务

cat /proc/$(pgrep nginx | head -1)/limits

六、常见坑总结

问题 原因
limits.conf 改了不生效 没重新登录
服务不生效 systemd 忽略 limits.conf
root 不生效 需单独写 root
Docker 不生效 Docker 默认 ulimit

如果你愿意,可以告诉我:

  • Debian 版本
  • 用户进程 / 系统服务 / Docker / 数据库
  • 具体改的是 nofile 还是 nproc

我可以给你精确到命令级别的配置方案。

0