温馨提示×

centos ulimit能调多大

小樊
48
2026-10-11 22:27:14
栏目: 智能运维

在 CentOS(以及一般 Linux 系统)里,ulimit 能调到多大,不是由 ulimit 命令本身决定的,而是由内核参数、系统资源、用户配置共同限制。下面分层说明。


一、ulimit 是什么

ulimit 控制的是 单进程(或单用户会话)资源上限,常见包括:

  • 最大打开文件数(nofile)
  • 最大进程/线程数(nproc)
  • 栈大小(stack)
  • 核心文件大小(core)
  • 最大内存(部分情况下)

二、能调多大的决定因素

1️⃣ 硬限制(hard limit)

  • ulimit -H 显示硬限制
  • 普通用户不能超过硬限制
  • 只有 root 能提高硬限制

2️⃣ 内核参数(最关键)

常见相关内核参数:

# 系统级最大打开文件数
fs.file-max

# 系统级最大进程数
kernel.pid_max

# 单用户最大进程数
/etc/security/limits.d/*.conf

查看:

cat /proc/sys/fs/file-max
cat /proc/sys/kernel/pid_max

三、常见项目中“最大能调多少”

✅ 打开文件数(nofile)

理论上限

  • 受 fs.file-max 限制(通常几百万)
  • 单进程受内存影响(每个 fd 约占 1KB 左右)

常见设置

* soft nofile 65535
* hard nofile 65535

极限例子(高并发服务器)

* hard nofile 1000000
fs.file-max = 2000000

⚠️ 但要注意:

  • fd 太多会吃内存
  • 某些老旧程序不支持 > 65535

✅ 进程/线程数(nproc)

受以下限制:

  • kernel.pid_max
  • 内存
  • nproc 限制

查看:

ulimit -u
cat /proc/sys/kernel/pid_max

一般:

* hard nproc 65535

极限服务器:

kernel.pid_max = 4194304

✅ 栈大小(stack)

  • 默认 8MB
  • 调太小容易段错误
  • 调太大浪费内存
ulimit -s 10240   # 10MB

四、CentOS 中“真正生效”的配置位置

1️⃣ 临时(当前 shell)

ulimit -n 100000

2️⃣ 永久(用户级)

/etc/security/limits.conf
或
/etc/security/limits.d/*.conf

示例:

* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

⚠️ 需要:

  • 使用 PAM(ssh / login)
  • 重新登录才生效

3️⃣ 系统级(内核)

/etc/sysctl.conf
fs.file-max = 2000000
kernel.pid_max = 4194304

生效:

sysctl -p

五、常见坑(非常重要)

  1. systemd 服务不读 limits.conf

    • 需要在 service 文件加:
      [Service]
      LimitNOFILE=1000000
      LimitNPROC=65535
      
  2. Docker 容器

    • 默认继承宿主机
    • 可在 docker run 加:
      --ulimit nofile=65535:65535
      
  3. 32 位程序

    • fd / 内存上限远低于 64 位

六、结论一句话

CentOS 的 ulimit 理论上可以调到几十万甚至上百万,但实际最大值取决于内核参数、内存、程序架构和服务管理方式。

如果你愿意,可以告诉我:

  • CentOS 版本(7 / 8 / Stream)
  • 用途(Web / 数据库 / 中间件)
  • 当前报错信息

我可以给你一套可直接用的参数模板。

0 踩