温馨提示×

如何测试debian ulimit

小樊
46
2026-09-19 03:05:16
栏目: 智能运维

在 Debian 系统中,ulimit 用于限制用户进程可使用的系统资源(如文件描述符数、进程数、内存等)。下面从查看、临时修改、永久修改、实际测试几个方面说明如何测试 Debian 的 ulimit。


一、查看当前 ulimit 设置

ulimit -a

常见输出示例:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
open files                      (-n) 1024
max user processes              (-u) 30934
virtual memory          (kbytes, -v) unlimited

查看某一项:

ulimit -n   # 文件描述符
ulimit -u   # 最大进程数

二、临时测试(仅当前 shell 生效)

ulimit -n 2048
ulimit -u 512

⚠️ 注意:

  • 只能调小,不能超系统限制
  • 退出 shell 后失效

三、永久修改 ulimit(Debian 推荐方式)

方法 1:/etc/security/limits.conf

sudo vim /etc/security/limits.conf

示例(对普通用户 testuser):

testuser soft nofile 4096
testuser hard nofile 8192
testuser soft nproc 1024
testuser hard nproc 2048

重新登录后生效。

✅ 需确保:

grep pam_limits /etc/pam.d/common-session

应有:

session required pam_limits.so

方法 2:systemd 服务(对服务进程)

sudo systemctl edit nginx
[Service]
LimitNOFILE=65535
LimitNPROC=4096
sudo systemctl daemon-reload
sudo systemctl restart nginx

四、如何“测试” ulimit 是否生效

1️⃣ 测试最大文件描述符(nofile)

ulimit -n 100

for ((i=0;i<200;i++)); do
  exec 3< /dev/null
done

或写一个小 C / Python 程序打开大量文件。

超出时会报错:

Too many open files

2️⃣ 测试最大进程数(nproc)

ulimit -u 50

for i in $(seq 1 100); do
  sleep 100 &
done

报错:

bash: fork: retry: Resource temporarily unavailable

3️⃣ 测试 core dump(core size)

ulimit -c unlimited

故意制造段错误:

int main(){ int *p=0; *p=1; }
gcc test.c
./a.out
ls core*

五、常见问题排查

不生效原因

  • 修改的是 root,但测试用普通用户
  • systemd 服务未配置 Limit*
  • SSH 登录未加载 PAM
  • Docker 容器有独立限制

六、快速测试脚本(示例)

#!/bin/bash
echo "Current nofile: $(ulimit -n)"
ulimit -n 50
echo "New nofile: $(ulimit -n)"

如果你有具体测试目标(比如 MySQL、Nginx、Docker、Java 应用),可以告诉我,我可以给你更针对性的测试方法。

0 踩