在 Debian(以及绝大多数 Linux 发行版)中,ulimit 被限制,主要是为了系统安全和资源可控性。下面从机制、原因和常见场景几个层面说明。
ulimit 是 shell 内建命令,用于查看或设置 当前 shell 及其子进程 的资源限制(resource limits),例如:
⚠️ 注意:
ulimit 只对当前 shell 会话有效,不会影响整个系统。
Debian 默认会限制用户可用的资源,防止:
例如:
Debian 使用 PAM(Pluggable Authentication Modules) 来设置用户级资源限制。
相关配置文件在:
/etc/security/limits.conf
/etc/security/limits.d/*.conf
例如:
* soft nofile 1024
* hard nofile 4096
含义:
soft:用户可自己调整,但不能超过 hardhard:只有 root 能提高nofile:最大打开文件数✅ 这些限制会在用户 登录时由 PAM 应用
在 使用 systemd 的 Debian(Debian 8+) 中:
ulimit 设置 不会影响 systemd 启动的服务服务限制查看:
systemctl show service_name | grep Limit
服务中设置:
[Service]
LimitNOFILE=65535
LimitNPROC=4096
否则,即使你 ulimit -n 65535,服务仍然被限制。
ulimit 只在 当前 shell 生效limits.confulimit -Hn # 查看 hard limit
ulimit -Sn # 查看 soft limit
普通用户只能:
ulimit -Sn 2048 # 合法
ulimit -Sn 100000 # 报错
只有 root 才能提高 hard limit。
原因:
limits.conf解决:
# 临时
ulimit -n 65535
# 永久(用户登录)
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
⚠️ 注意:需要重新登录
原因:
解决:
[Service]
LimitNOFILE=65535
然后:
systemctl daemon-reexec
systemctl restart service_name
原因:
解决:
docker run --ulimit nofile=65535:65535 ...
# 当前 shell 限制
ulimit -a
# 查看进程限制
cat /proc/<pid>/limits
# systemd 服务限制
systemctl show <service> | grep Limit
Debian 中 ulimit 被限制,是为了防止单个用户或程序耗尽系统资源,通过 PAM、systemd 和内核机制共同实现。
如果你愿意,可以告诉我:
我可以给你精确到点的解决方案。