在 Debian 系统中,ulimit 用于限制用户进程可使用的系统资源(如文件描述符数、进程数、内存等)。下面从查看、临时修改、永久修改、实际测试几个方面说明如何测试 Debian 的 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 # 最大进程数
ulimit -n 2048
ulimit -u 512
⚠️ 注意:
/etc/security/limits.confsudo 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
sudo systemctl edit nginx
[Service]
LimitNOFILE=65535
LimitNPROC=4096
sudo systemctl daemon-reload
sudo systemctl restart nginx
ulimit -n 100
for ((i=0;i<200;i++)); do
exec 3< /dev/null
done
或写一个小 C / Python 程序打开大量文件。
超出时会报错:
Too many open files
ulimit -u 50
for i in $(seq 1 100); do
sleep 100 &
done
报错:
bash: fork: retry: Resource temporarily unavailable
ulimit -c unlimited
故意制造段错误:
int main(){ int *p=0; *p=1; }
gcc test.c
./a.out
ls core*
#!/bin/bash
echo "Current nofile: $(ulimit -n)"
ulimit -n 50
echo "New nofile: $(ulimit -n)"
如果你有具体测试目标(比如 MySQL、Nginx、Docker、Java 应用),可以告诉我,我可以给你更针对性的测试方法。