在 Ubuntu 中,ulimit 用于控制 shell 及进程可使用的系统资源(如打开文件数、进程数、内存等)。优化 ulimit 通常是为了解决“Too many open files”“fork: retry: Resource temporarily unavailable”等问题。下面按使用场景 + 配置方式系统说明。
ulimit -a
常见关键项:
open files (-n):最大打开文件数max user processes (-u):最大用户进程数stack size (-s)virtual memory (-v)查看某一项:
ulimit -n
ulimit -u
ulimit -n 65535
ulimit -u 4096
⚠️ 重启或新开 shell 后失效。
/etc/security/limits.confsudo vim /etc/security/limits.conf
示例(为所有用户或指定用户):
* soft nofile 65535
* hard nofile 65535
* soft nproc 4096
* hard nproc 4096
说明:
soft:警告值(可临时超过)hard:最大值(不可超过)nofile:打开文件数nproc:进程数✅ 生效条件:
在 Ubuntu 16.04+ / 18.04+ / 20.04+ 中,很多服务由 systemd 管理,limits.conf 不生效。
sudo vim /etc/systemd/user.conf
DefaultLimitNOFILE=65535
DefaultLimitNPROC=4096
systemctl --user daemon-reexec
sudo systemctl edit nginx
加入:
[Service]
LimitNOFILE=65535
LimitNPROC=4096
然后:
sudo systemctl daemon-reload
sudo systemctl restart nginx
查看是否生效:
cat /proc/$(pgrep nginx | head -1)/limits
cat /proc/sys/fs/file-max
临时:
sudo sysctl -w fs.file-max=2097152
永久:
sudo vim /etc/sysctl.conf
fs.file-max = 2097152
sudo sysctl -p
cat /proc/sys/kernel/pid_max
sudo sysctl -w kernel.pid_max=4194304
nofile 65535~1048576
nproc 4096~8192
nofile 100000+
docker run --ulimit nofile=65535:65535
✅ 修改后是否重新登录 / 重启服务
✅ systemd 服务是否单独配置 Limit*
✅ 是否受内核 file-max 限制
✅ root 用户是否被 * 覆盖(需显式写 root)
如果你能告诉我:
我可以给你一套精确可直接用的配置。