在 Debian(以及大多数 Linux 发行版)中,ulimit 用于查看或设置 shell 及进程对系统资源的使用限制。它实际上是 Bash 等 shell 内建命令,底层依赖 Linux 的 setrlimit() / getrlimit() 系统调用。
ulimit -a
示例输出:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 256
virtual memory (kbytes, -v) unlimited
| 参数 | 含义 | 示例 |
|---|---|---|
-a |
显示所有限制 | ulimit -a |
-c |
core 文件大小(blocks) | ulimit -c unlimited |
-d |
数据段大小(KB) | ulimit -d 512000 |
-f |
可创建文件大小(blocks) | ulimit -f 100000 |
-n |
最大打开文件数 | ulimit -n 65535 |
-p |
管道缓冲区大小 | ulimit -p |
-s |
栈大小(KB) | ulimit -s 10240 |
-t |
CPU 时间(秒) | ulimit -t 60 |
-u |
最大用户进程数 | ulimit -u 4096 |
-v |
虚拟内存大小(KB) | ulimit -v unlimited |
-l |
可锁定的内存(KB) | ulimit -l 64 |
-m |
常驻内存(已废弃) | 不推荐使用 |
ulimit -Sn # 查看软限制
ulimit -Hn # 查看硬限制
| 类型 | 是否可突破 | 说明 |
|---|---|---|
| 软限制(soft) | ✅ 可调整 | 实际生效限制 |
| 硬限制(hard) | ❌ 不可突破 | 只有 root 可调 |
普通用户:
ulimit -n 65535
ulimit -u 4096
⚠️ 重启或新 shell 失效
/etc/security/limits.confsudo vim /etc/security/limits.conf
示例:
* soft nofile 65535
* hard nofile 65535
* soft nproc 4096
* hard nproc 4096
说明:
* 表示所有用户root、www-data 等⚠️ 需要 PAM 支持,通常 Debian 默认启用
如果是 systemd 管理的服务(如 Nginx、MySQL):
sudo systemctl edit nginx
添加:
[Service]
LimitNOFILE=65535
LimitNPROC=4096
然后:
sudo systemctl daemon-reexec
sudo systemctl restart nginx
可能原因:
检查:
cat /proc/<pid>/limits
ulimit -n 65535
ulimit -u 65535
ulimit -c 0
ulimit -t 300
ulimit 控制的是“进程能消耗多少系统资源”,不是系统总资源。
如果你愿意,我可以:
ulimit -a 输出nofile / nproc 与性能的关系