简短回答:有关,而且关系很大。
在 Debian(以及大多数现代 Linux 发行版)里,ulimit 和 systemd 是两套不同层面但会互相影响的机制。
ulimit 是什么ulimit 是 shell / PAM / 登录会话 层面的资源限制:
/etc/security/limits.conf/etc/security/limits.d/*.confulimit -n 65535⚠️ 这些限制 只对“登录会话启动的进程”有效。
systemd 是 系统和服务管理器,它启动的服务 不是通过登录 shell 启动的。
因此:
systemd 服务默认“看不见”
limits.conf里的 ulimit 设置
systemd 用 自己的资源限制参数,常见有:
.service)[Service]
LimitNOFILE=65535
LimitNPROC=4096
LimitCORE=infinity
常见参数:
LimitNOFILELimitNPROCLimitASLimitMEMLOCKLimitSTACK修改后:
systemctl daemon-reload
systemctl restart xxx
典型场景:
✅ 在终端里:
ulimit -n
# 输出 65535
❌ 但 systemd 服务里:
cat /proc/<pid>/limits
# Max open files = 1024
原因:
limits.conf + shell 影响systemd 还会影响 用户登录会话:
User= 服务systemd --userlogind例如:
# /etc/systemd/system.conf
DefaultLimitNOFILE=65535
会影响 所有由 systemd 启动的进程(包括部分用户会话)
| 场景 | 是否受 ulimit/limits.conf 影响 |
|---|---|
| 手动 shell 登录 | ✅ 是 |
| ssh 登录 | ✅ 是(PAM) |
| systemd 服务 | ❌ 否(除非配置) |
| docker 容器 | ⚠️ 取决于宿主 systemd |
| cron | ⚠️ 通常不受 |
如果你愿意,可以告诉我:
我可以直接给你一份 Debian 上最稳妥的配置示例。