温馨提示×

ubuntu ulimit怎么设置

小樊
40
2026-10-14 11:05:10
栏目: 智能运维

在 Ubuntu 中,ulimit 用于限制用户进程可使用的系统资源(如文件描述符数量、进程数、内存等)。下面按使用场景系统说明如何设置。


一、查看当前 ulimit 设置

ulimit -a

常见参数:

ulimit -n   # 文件描述符数量
ulimit -u   # 最大用户进程数
ulimit -s   # 栈大小
ulimit -c   # core 文件大小

二、临时设置(当前 shell 会话有效)

只对当前终端 / 当前用户有效,重启或新开 shell 失效。

ulimit -n 65535
ulimit -u 4096

⚠️ 非 root 用户只能调小,不能调大超过系统限制。


三、永久设置(用户级)

1️⃣ 使用 /etc/security/limits.conf

编辑文件:

sudo vim /etc/security/limits.conf

示例(对某个用户):

www-data soft nofile 65535
www-data hard nofile 65535
*        soft nproc  4096
*        hard nproc  4096

格式说明:

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

常用资源:

  • nofile:打开文件数
  • nproc:进程数
  • memlock:锁定内存
  • core:core 文件

✅ 需要 重新登录 或重启生效。


2️⃣ 确保 PAM 启用(很重要)

检查:

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

应有:

session required pam_limits.so

四、systemd 服务的 ulimit(非常重要)

如果是 systemd 服务(如 nginx、mysql、docker),limits.conf 不生效。

方法 1:在 service 文件中设置

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=1000000

永久:

sudo vim /etc/sysctl.conf
fs.file-max = 1000000
sudo sysctl -p

六、常见坑总结

❌ limits.conf 对 systemd 服务无效
❌ 非 root 用户不能调高 hard limit
❌ Docker 容器需额外设置 --ulimit
❌ 修改后不重新登录不生效


七、Docker 示例(补充)

docker run --ulimit nofile=65535:65535 nginx

如果你能告诉我:

  • 是 普通用户 / root / systemd 服务
  • 想改的是 nofile / nproc / 内存

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

0 踩