在 Debian(以及大多数 Linux 发行版) 中,ulimit 本身并不是一个“固定最大值”,而是 受内核参数、系统资源、配置方式 共同限制。下面分情况说明。
ulimit 是 shell 内建命令,用来限制 当前 shell 及其子进程 可使用的资源,常见包括:
ulimit -n
cat /proc/sys/fs/nr_open
默认通常是:
1048576
✅ 这是单个进程可设置的最大 fd 上限
cat /proc/sys/fs/file-max
常见值:
9223372036854775807(理论最大值)
实际受内存影响
| 限制层级 | 位置 |
|---|---|
| 进程级 | ulimit -n |
| 用户级 | /etc/security/limits.conf |
| 内核级 | fs.nr_open |
✅ ulimit 最大不能超过 fs.nr_open
ulimit -u
cat /proc/sys/kernel/pid_max
默认:
32768
/etc/security/limits.conf
✅ 不能超过 pid_max
| 项目 | 理论最大值 | 说明 |
|---|---|---|
| open files | fs.nr_open |
默认 1048576 |
| processes | kernel.pid_max |
默认 32768 |
| stack size | 无硬性上限 | 受内存限制 |
| core dump | unlimited | 受磁盘限制 |
ulimit -n 1000000
ulimit -u 65535
⚠️ 不能超过内核限制
sudo vim /etc/sysctl.conf
fs.nr_open = 2097152
fs.file-max = 2097152
kernel.pid_max = 65535
应用:
sudo sysctl -p
sudo vim /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000
* soft nproc 65535
* hard nproc 65535
⚠️ 需要 重新登录或使用 PAM
❌ ulimit 不限制 root 以外的所有进程 ✅ 正确:ulimit 只影响 当前 shell 及其子进程
❌ file-max 是单个进程限制
✅ 正确:file-max 是 系统级
Debian 中 ulimit 的最大值不是固定的,而是受
fs.nr_open、pid_max、内存和配置共同限制,常见最大值是 1048576(文件)和 32768(进程),但可以通过内核参数调大。
如果你有具体场景(如 高并发服务器 / Docker / Nginx / MySQL),我可以给你一套 生产级 ulimit 推荐配置。