温馨提示×

debian ulimit和systemd有关吗

小樊
60
2026-09-03 20:23:15
栏目: 智能运维

简短回答:有关,而且关系很大。

在 Debian(以及大多数现代 Linux 发行版)里,ulimit 和 systemd 是两套不同层面但会互相影响的机制。


1. ulimit 是什么

ulimit 是 shell / PAM / 登录会话 层面的资源限制:

  • 控制单个 进程或会话 的资源(如文件描述符数、栈大小、core 文件大小等)
  • 常见来源:
    • /etc/security/limits.conf
    • /etc/security/limits.d/*.conf
    • shell 里执行 ulimit -n 65535

⚠️ 这些限制 只对“登录会话启动的进程”有效。


2. systemd 是什么

systemd 是 系统和服务管理器,它启动的服务 不是通过登录 shell 启动的。

因此:

systemd 服务默认“看不见” limits.conf 里的 ulimit 设置


3. systemd 自己的限制机制

systemd 用 自己的资源限制参数,常见有:

服务单元文件(.service)

[Service]
LimitNOFILE=65535
LimitNPROC=4096
LimitCORE=infinity

常见参数:

  • LimitNOFILE
  • LimitNPROC
  • LimitAS
  • LimitMEMLOCK
  • LimitSTACK

修改后:

systemctl daemon-reload
systemctl restart xxx

4. 为什么你会“觉得有关系”

典型场景:

✅ 在终端里:

ulimit -n
# 输出 65535

❌ 但 systemd 服务里:

cat /proc/<pid>/limits
# Max open files = 1024

原因:

  • 终端进程:受 limits.conf + shell 影响
  • systemd 服务:只受 systemd 配置影响

5. 全局影响(systemd 作为 PID 1)

systemd 还会影响 用户登录会话:

  • User= 服务
  • systemd --user
  • logind

例如:

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

会影响 所有由 systemd 启动的进程(包括部分用户会话)


6. 总结对照表

场景 是否受 ulimit/limits.conf 影响
手动 shell 登录 ✅ 是
ssh 登录 ✅ 是(PAM)
systemd 服务 ❌ 否(除非配置)
docker 容器 ⚠️ 取决于宿主 systemd
cron ⚠️ 通常不受

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

  • 你是 改文件句柄(nofile) 还是 进程数 / 内存
  • 是 系统服务 还是 普通用户程序

我可以直接给你一份 Debian 上最稳妥的配置示例。

0 踩