温馨提示×

怎样修改ubuntu ulimit

小樊
45
2026-10-14 11:11:09
栏目: 智能运维

在 Ubuntu 中修改 ulimit(资源限制)有多种方式,取决于你是临时生效还是永久生效,以及是对当前 shell / 用户 / 系统服务生效。

下面按常见场景说明。


一、查看当前 ulimit

ulimit -a

查看某一项,例如:

ulimit -n   # 打开文件数
ulimit -u   # 最大进程数

二、临时修改(当前 shell 生效)

ulimit -n 65536
ulimit -u 4096

⚠️ 注意:

  • 只对当前 shell 及其子进程有效
  • 重新登录后失效
  • 不能“放大”超过系统硬限制(hard limit)

查看硬/软限制:

ulimit -Hn   # 硬限制
ulimit -Sn   # 软限制

三、永久修改(用户级)

1️⃣ 修改 /etc/security/limits.conf

sudo vim /etc/security/limits.conf

示例(针对用户 ubuntu):

ubuntu soft nofile 65536
ubuntu hard nofile 65536
ubuntu soft nproc 4096
ubuntu hard nproc 4096

格式:

<用户/组>  soft/hard  资源类型  值

常用资源:

  • nofile:打开文件数
  • nproc:进程数
  • stack:栈大小
  • memlock:锁内存

✅ 需要 重新登录 才生效
❗ 对 systemd 服务不生效


2️⃣ 确保 PAM 启用

确认以下文件包含:

session required pam_limits.so

检查:

grep pam_limits /etc/pam.d/common-session
grep pam_limits /etc/pam.d/common-session-noninteractive

四、对 systemd 服务生效(非常重要)

Ubuntu 18.04+ 默认使用 systemd,limits.conf 对服务无效

方法 1:修改 service 文件

sudo systemctl edit nginx

添加:

[Service]
LimitNOFILE=65536
LimitNPROC=4096

然后:

sudo systemctl daemon-reload
sudo systemctl restart nginx

方法 2:全局 systemd 限制

sudo vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=4096
sudo systemctl daemon-reexec

五、系统级内核参数(可选)

某些情况还需调整内核参数:

fs.file-max = 1000000
sudo sysctl -w fs.file-max=1000000

永久:

echo "fs.file-max = 1000000" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

六、常见坑总结

❌ limits.conf 改了但没生效
→ 你是 systemd 服务?需要改 service 文件

❌ ulimit -n 改不上去
→ 超过了 hard limit 或系统 fs.file-max

❌ Docker 容器内不生效
→ 需要在宿主机或 docker run 加 --ulimit


如果你能告诉我:

  • Ubuntu 版本
  • 改哪项(nofile / nproc / 内存等)
  • 是给用户还是服务

我可以给你精确配置示例。

0 踩