在 Debian(及大多数 Linux 发行版)中,ulimit 用于限制 用户/进程 可使用的系统资源(如文件描述符数、进程数、内存等)。
ulimit 本身是 shell 内建命令,不能直接“写进一个配置文件长期生效”,而是要通过 PAM + limits.conf / systemd 来配置。
下面按常见场景说明。
ulimit -n 65536 # 文件描述符
ulimit -u 4096 # 最大进程数
ulimit -a # 查看当前限制
⚠️ 只在当前终端 / 当前会话有效,重启或重新登录失效。
/etc/security/limits.confsudo vim /etc/security/limits.conf
示例(对用户 www 和所有用户):
# 格式:
# <domain> <type> <item> <value>
* soft nofile 65536
* hard nofile 65536
www soft nproc 4096
www hard nproc 4096
常用 item:
nofile:打开文件数nproc:进程数memlock:锁内存stack:栈大小Debian 默认已启用,但需确认:
grep pam_limits /etc/pam.d/common-session
grep pam_limits /etc/pam.d/common-session-noninteractive
应有:
session required pam_limits.so
如果没有,手动添加。
logout
或
su - www
ulimit -a
⚠️ systemd 服务不会读取 limits.conf
[Service]
LimitNOFILE=65536
LimitNPROC=4096
然后:
sudo systemctl daemon-reload
sudo systemctl restart your-service
sudo vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=4096
sudo systemctl daemon-reexec
sudo vim /etc/profile.d/ulimit.sh
ulimit -n 65536
ulimit -u 4096
只对 登录 shell 有效。
ulimit -n
ulimit -u
cat /proc/$(pidof your_app)/limits
❌ systemd 服务不读 limits.conf
❌ Docker 容器需额外配置
❌ 硬限制不能超内核参数
❌ 修改后必须重新登录 / 重启服务
如果你能告诉我:
我可以给你 精确配置文件示例。