温馨提示×

debian ulimit怎么生效

小樊
46
2026-09-19 03:04:14
栏目: 智能运维

在 Debian 里,ulimit 的“生效”通常分 当前 shell / 进程系统级 / 服务级 两种场景。很多人改了但“没生效”,是因为改错地方或被 systemd 覆盖。下面按常见情况说明。


一、只对当前 shell / 手动启动的程序生效

1. 查看当前限制

ulimit -a

2. 临时修改(重启失效)

ulimit -n 65535      # 打开文件数
ulimit -u 4096       # 最大进程数

⚠️ 注意:

  • 只能 调小或调大(在硬限制内)
  • 非 root 不能改硬限制

查看硬限制:

ulimit -Hn
ulimit -Sn

二、对“所有登录用户”生效(PAM + limits.conf)

这是 最常用、推荐 的方式。

1. 修改 /etc/security/limits.conf

sudo vim /etc/security/limits.conf

示例:

*           soft    nofile      65535
*           hard    nofile      65535
www-data    soft    nproc       4096
www-data    hard    nproc       4096

2. 确保 PAM 启用

确认以下文件包含(一般默认有):

/etc/pam.d/common-session
/etc/pam.d/common-session-noninteractive

包含:

session required pam_limits.so

3. 重新登录生效

logout
ssh 重新登录

✅ 对:

  • 登录用户
  • su / ssh ❌ 不对:
  • systemd 服务(见下)

三、对 systemd 服务生效(重点!)

Debian 用 systemd 后,limits.conf 对服务基本无效

方法 1:服务配置文件(推荐)

sudo systemctl edit nginx

加入:

[Service]
LimitNOFILE=65535
LimitNPROC=4096

然后:

sudo systemctl daemon-reload
sudo systemctl restart nginx

查看:

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

方法 2:全局 systemd 限制

sudo vim /etc/systemd/system.conf
DefaultLimitNOFILE=65535
DefaultLimitNPROC=4096
sudo systemctl daemon-reexec

⚠️ 需重启或 daemon-reexec


四、内核级参数(可选)

有些限制还受内核影响:

fs.file-max

查看:

cat /proc/sys/fs/file-max

修改:

sudo sysctl -w fs.file-max=1000000

永久:

/etc/sysctl.conf
fs.file-max=1000000

五、常见“不生效”原因总结

❌ 改了 limits.conf 但:

  • 用的是 systemd 服务
  • 没有重新登录
  • 硬限制更小
  • 用的 Docker(需额外配置)

✅ 排查顺序:

  1. ulimit -a
  2. cat /proc/PID/limits
  3. 服务用 systemctl show xxx | grep Limit

如果你能说 具体场景(比如:Nginx?MySQL?Docker?SSH 用户?),我可以直接给你一套精确配置。

0