在 Debian(以及大多数 Linux 发行版)中,ulimit 用于限制进程资源使用。要“解除”或“提高” ulimit,需要分情况处理,因为普通用户不能无限制提高,很多限制受系统级配置约束。
下面按常见场景说明。
ulimit -a
常见限制项:
-n:打开文件数(file descriptors)-u:最大进程数-s:栈大小-c:core dump 大小ulimit -n 65535
ulimit -u 4096
⚠️ 如果提示:
ulimit: value exceeds hard limit
说明你碰到了 hard limit,普通用户无法突破。
sudo -i
ulimit -n 65535
ulimit -u 65535
root 可以设置到系统允许的最大值。
/etc/security/limits.conf编辑:
sudo nano /etc/security/limits.conf
在文件末尾添加(示例):
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
说明:
*:所有用户(可换成用户名)soft:当前生效限制hard:最大允许限制nofile:打开文件数nproc:进程数⚠️ 需要重新登录才生效
如果你发现 limits.conf 不生效,很可能是 systemd 覆盖了限制。
sudo nano /etc/systemd/system.conf
添加或修改:
DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535
sudo nano /etc/systemd/user.conf
同样添加:
DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535
然后重启:
sudo reboot
例如 nginx / mysql:
sudo systemctl edit nginx
添加:
[Service]
LimitNOFILE=65535
LimitNPROC=65535
然后:
sudo systemctl restart nginx
ulimit -n
ulimit -u
或查看进程:
cat /proc/$(pidof nginx)/limits
cat /proc/sys/fs/file-max
sudo sysctl -w fs.file-max=2097152
sudo nano /etc/sysctl.conf
添加:
fs.file-max = 2097152
然后:
sudo sysctl -p
| 场景 | 解决方式 |
|---|---|
| 临时解除 | ulimit -n 65535 |
| 永久解除 | /etc/security/limits.conf |
| systemd 不生效 | /etc/systemd/system.conf |
| 服务限制 | systemctl edit xxx |
| 系统上限 | fs.file-max |
如果你能说明:
我可以给你精确到命令级别的方案。