温馨提示×

debian ulimit在哪里设置

小樊
36
2026-09-01 00:34:08
栏目: 智能运维

在 Debian 里,ulimit 相关限制可以从多个层面设置,具体取决于你想“对谁、在什么时候”生效。下面按常见场景说明。


一、当前 shell / 当前会话(临时)

ulimit -n 65535      # 打开文件数
ulimit -u 4096       # 最大进程数
ulimit -a            # 查看所有限制

⚠️ 只对当前 shell 及其子进程有效,重启或新登录后失效。


二、用户级永久配置(最常用)

1️⃣ /etc/security/limits.conf

这是 PAM 登录用户的限制文件(SSH / 终端登录生效)。

sudo vim /etc/security/limits.conf

示例:

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

字段说明:

用户/组   软/硬限制   资源类型   值

常见资源:

  • nofile:打开文件数
  • nproc:进程数
  • core:core 文件大小
  • memlock:锁定内存

注意

  • 必须启用 PAM:/etc/pam.d/common-session 里通常有:
    session required pam_limits.so
    
  • 对 systemd 服务不生效

2️⃣ /etc/security/limits.d/*.conf

Debian 推荐把自定义配置放这里,避免覆盖主文件:

sudo vim /etc/security/limits.d/99-custom.conf

格式与 limits.conf 完全相同,按字母顺序加载。


三、systemd 服务(非常重要)

如果你发现:

“limits.conf 设了,但 Nginx / MySQL 没生效”

那是因为 systemd 服务不走 PAM

方法 1:服务级配置

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

修改后需重启系统或 systemctl daemon-reexec


四、系统级内核参数(不是 ulimit,但相关)

某些限制由内核控制:

# 最大文件描述符总数
fs.file-max = 2097152
sudo vim /etc/sysctl.conf
fs.file-max = 2097152
sudo sysctl -p

五、Docker 容器里的 ulimit

Docker 默认会继承宿主限制,也可显式设置:

docker run --ulimit nofile=65535:65535 nginx

docker-compose.yml

ulimits:
  nofile:
    soft: 65535
    hard: 65535

六、快速排查顺序(推荐)

  1. ulimit -a(当前用户)
  2. cat /proc/<pid>/limits(看具体进程)
  3. 是登录用户 → limits.conf
  4. 是服务 → systemctl edit
  5. 还不够 → sysctl

如果你能说清楚:

  • 哪个用户 / 哪个服务
  • 想改 nofile / nproc / 内存 哪一种

我可以直接给你一份可直接用的配置

0