在 Debian(以及大多数 Linux 发行版)中,ulimit 用于限制 shell 及其启动进程可以使用的系统资源。下面介绍如何检测 ulimit 的当前设置,以及不同层级的查看方法。
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
| 资源 | 命令 |
|---|---|
| 最大打开文件数 | ulimit -n |
| 最大进程数 | ulimit -u |
| core dump 大小 | ulimit -c |
| 栈大小 | ulimit -s |
| 文件大小 | ulimit -f |
| 虚拟内存 | ulimit -v |
示例:
ulimit -n
ulimit -u
/etc/security/limits.conf这是 用户级 ulimit 的主要配置文件。
cat /etc/security/limits.conf
常见格式:
* soft nofile 65535
* hard nofile 65535
以及 /etc/security/limits.d/*.conf:
ls /etc/security/limits.d/
⚠️ 注意:
如果是服务(如 Nginx、MySQL、Docker),ulimit 可能不生效,需要查看 systemd 限制。
systemctl show <service> | grep -i limit
例如:
systemctl show nginx | grep Limit
systemctl show --property DefaultLimitNOFILE
/proccat /proc/<PID>/limits
示例:
cat /proc/1234/limits
这是最准确的方法,显示该进程实际生效的限制。
prlimitprlimit -p <PID>
或查看指定资源:
prlimit -n -p <PID>
ulimit 是 shell 内建命令,不同 shell 行为可能不同。
echo $SHELL
ps -p $$
常见:
ulimit -a 只在 当前 shell 生效cron / systemd 启动的程序通常 不受 shell ulimit 影响ulimit 可能受宿主机或容器运行时限制:
docker run --ulimit nofile=65536:65536 ...
ulimit -n
ulimit -u
cat /proc/self/limits
systemctl show | grep Limit
如果你愿意,可以告诉我:
cat /etc/debian_version)我可以给你更精确的排查方案。