在 Debian(及其他 Linux 系统)中,ulimit 本身只是 shell 的内置命令,不能“永久”生效。要永久修改资源限制,需要通过 PAM + limits.conf 或 systemd 的方式来实现,具体取决于你希望影响的是“登录用户”还是“系统服务”。
下面分情况说明。
/etc/security/limits.conf这是最常用的方法。
编辑文件:
sudo vim /etc/security/limits.conf
在文件末尾添加(示例):
* soft nofile 65535
* hard nofile 65535
含义说明:
*:对所有用户生效(也可指定用户名)soft:软限制(用户可自行修改,但不能超过 hard)hard:硬限制(只有 root 可改)nofile:最大打开文件数其他常见限制类型:
nproc 最大进程数
stack 栈大小
memlock 内存锁定
Debian 默认已启用,但建议确认:
grep pam_limits /etc/pam.d/common-session
如果没有,手动添加:
session required pam_limits.so
修改后 必须重新登录(不是 sudo,而是重新 ssh 或 tty 登录):
ulimit -n
如果你是给 服务(如 nginx、mysql、docker) 改 ulimit,那 limits.conf 不生效。
sudo systemctl edit 服务名
例如:
sudo systemctl edit nginx
写入:
[Service]
LimitNOFILE=65535
LimitNPROC=65535
然后:
sudo systemctl daemon-reload
sudo systemctl restart nginx
修改:
sudo vim /etc/systemd/system.conf
添加:
DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535
然后重启系统。
Debian 默认:
root hard nofile 4096
如果只想对普通用户生效:
用户名 soft nofile 65535
用户名 hard nofile 65535
常见原因:
/etc/security/limits.d/*.conf 覆盖| 场景 | 正确方式 |
|---|---|
| 普通用户 | /etc/security/limits.conf |
| root 登录 | limits.conf + 重新登录 |
| systemd 服务 | systemctl edit |
| 全部服务 | system.conf |
如果你愿意,可以告诉我:
cat /etc/debian_version)我可以给你精确到命令级别的操作方案。