温馨提示×

如何检测Debian ulimit

小樊
37
2026-07-23 21:18:01
栏目: 智能运维

在 Debian(以及大多数 Linux 发行版)中,ulimit 用于限制 shell 及其启动进程可以使用的系统资源。下面介绍如何检测 ulimit 的当前设置,以及不同层级的查看方法


一、在 Shell 中直接检测 ulimit

1. 查看所有资源限制(最常用)

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

2. 查看指定资源限制

资源 命令
最大打开文件数 ulimit -n
最大进程数 ulimit -u
core dump 大小 ulimit -c
栈大小 ulimit -s
文件大小 ulimit -f
虚拟内存 ulimit -v

示例:

ulimit -n
ulimit -u

二、查看系统级限制(PAM / systemd)

1. /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/

⚠️ 注意:

  • 只对 通过 PAM 登录的用户 生效
  • 对 systemd 服务 不生效

2. systemd 服务限制(非常重要)

如果是服务(如 Nginx、MySQL、Docker),ulimit 可能不生效,需要查看 systemd 限制。

查看某个服务的限制

systemctl show <service> | grep -i limit

例如:

systemctl show nginx | grep Limit

查看 systemd 全局默认限制

systemctl show --property DefaultLimitNOFILE

三、查看运行中进程的实际 ulimit

1. 通过 /proc

cat /proc/<PID>/limits

示例:

cat /proc/1234/limits

这是最准确的方法,显示该进程实际生效的限制。


2. 通过 prlimit

prlimit -p <PID>

或查看指定资源:

prlimit -n -p <PID>

四、查看当前 shell 的类型

ulimitshell 内建命令,不同 shell 行为可能不同。

echo $SHELL
ps -p $$

常见:

  • bash ✅
  • dash ❌(不支持 ulimit)
  • zsh ✅

五、常见排查建议

1. 登录 shell vs 非登录 shell

  • ulimit -a 只在 当前 shell 生效
  • cron / systemd 启动的程序通常 不受 shell ulimit 影响

2. Docker / 容器

ulimit 可能受宿主机或容器运行时限制:

docker run --ulimit nofile=65536:65536 ...

六、快速检测清单(推荐)

ulimit -n
ulimit -u
cat /proc/self/limits
systemctl show | grep Limit

如果你愿意,可以告诉我:

  • 用户进程 还是 系统服务
  • 文件数 / 进程数 / 内存 哪一类问题
  • Debian 版本(cat /etc/debian_version

我可以给你更精确的排查方案。

0