在 Debian(以及其他 Linux 发行版)里,ulimit 能设多大,不是由 ulimit 本身决定的,而是由内核参数、系统资源、以及你是普通用户还是 root 决定的。下面分点说清楚。
ulimit 是 shell 内建命令,用来限制当前 shell 及其子进程的资源使用,比如:
它只是用户态限制,最终受内核和系统配置约束。
/proc/sys/fs/file-max
限制(系统级最大 FD 数)查看:
cat /proc/sys/fs/file-max
临时改:
sysctl -w fs.file-max=10000000
受:
/proc/sys/kernel/pid_max
/proc/sys/kernel/threads-max
查看:
cat /proc/sys/kernel/pid_max
cat /proc/sys/kernel/threads-max
一般:
ulimit -v(虚拟内存):可以非常大/etc/security/limits.conf/etc/security/limits.conf* soft nofile 65535
* hard nofile 1000000
如果是 systemd 启动的服务:
[Service]
LimitNOFILE=1000000
LimitNPROC=65535
否则 ulimit 不生效!
| 项目 | 普通服务器 | 高并发服务器 |
|---|---|---|
| nofile | 65535 | 100万+ |
| nproc | 4096 | 几万 |
| stack | 8M | 可调大 |
| 虚拟内存 | 很大 | 很大 |
Debian 上 ulimit 能设多大 = 内核允许的最大值 ≤ 系统资源配置 ≤ root 权限
如果你愿意,可以告诉我:
我可以给你一套可直接用的 ulimit 配置。