在 Debian(以及大多数 Linux 发行版)中,最大文件数(open files) 受多个层次限制,没有单一“最大值”,而是取决于系统级 + 用户级 + 进程级的配置。
下面分层说明,并给出实际可调的最大值。
ulimit -n
默认通常是:
ulimit -Hn
cat /proc/sys/fs/file-max
这是 内核允许整个系统打开的最大文件数。
示例(常见值):
8192000
或更高(取决于内存)
cat /proc/sys/fs/file-max
1000000 ~ 100000000
✅ 这是全局最大,不是单个进程
ulimit -Sn # 软限制
ulimit -Hn # 硬限制
/proc/sys/fs/nr_opencat /proc/sys/fs/nr_open
默认:
1048576
✅ 单个进程最大 open files 通常 ≤ 1048576
cat /proc/<pid>/limits | grep "open files"
ulimit -nfs.nr_openLimitNOFILEsudo vim /etc/sysctl.conf
添加或修改:
fs.file-max = 10000000
生效:
sudo sysctl -p
sudo vim /etc/systemd/system.conf
DefaultLimitNOFILE=1000000
sudo vim /etc/systemd/user.conf
DefaultLimitNOFILE=1000000
重启或重新登录生效。
sudo vim /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000
⚠️ 注意:
sudo sysctl -w fs.nr_open=2097152
或写入 /etc/sysctl.conf:
fs.nr_open=2097152
| 层级 | 最大值 | 说明 |
|---|---|---|
| 系统级 | fs.file-max |
全局最大 |
| 单进程 | ≤ fs.nr_open |
默认 1048576 |
| ulimit | ≤ nr_open | 用户级限制 |
| 实际推荐 | 100 万 ~ 500 万 | 高并发服务器 |
❌ 认为 ulimit -n 是系统最大
❌ 只改 limits.conf 但服务是 systemd
❌ 设置超过 nr_open 导致失败
如果你愿意,可以告诉我:
我可以给你一套最优配置方案。