在 CentOS(以及其它 Linux 发行版)中,ulimit 用于限制单个用户或单个进程在系统资源上的使用上限,主要由 shell 及 PAM/系统配置控制。它不能直接限制整个系统,只针对用户会话 / 进程。
下面按类别说明 ulimit 能限制什么:
一、常见可限制的资源(最常用)
1️⃣ 文件相关
- -f:单个文件最大大小(blocks)
- -n:进程可打开的最大文件描述符数
- -c:core 文件最大大小(用于调试)
- -d:进程数据段最大大小
- -s:线程栈大小
- -m / -v:内存使用(部分系统不生效)
2️⃣ 进程 / 线程相关
- -u:用户可创建的最大进程数
- -T:最大线程数(部分 CentOS 版本支持)
- -t:CPU 时间(秒)
3️⃣ 内存 / 地址空间
- -v:虚拟内存上限
- -l:可锁定的内存(如
mlock)
- -m:常驻内存(RSS,很多系统忽略)
4️⃣ 信号 / IPC
- -q:POSIX 消息队列大小
- -e:最大调度优先级
- -r:实时优先级
5️⃣ 其他
二、ulimit 能“限制谁”
✅ 能限制:
- 某个 shell 启动的所有进程
- 某个 系统用户
- 某个 服务(通过 systemd / PAM)
❌ 不能限制:
三、在 CentOS 中常见使用方式
1️⃣ 当前 shell 查看
ulimit -a
2️⃣ 临时修改(只对当前会话有效)
ulimit -n 65535
ulimit -u 4096
3️⃣ 永久生效(用户级)
编辑:
/etc/security/limits.conf
示例:
* soft nofile 65535
* hard nofile 65535
4️⃣ systemd 服务限制
[Service]
LimitNOFILE=65535
LimitNPROC=4096
四、典型使用场景
- 高并发服务(Nginx / Redis):
nofile
- 防止 fork 炸弹:
-u
- 限制异常程序内存:
-v
- 调试程序:
-c
如果你愿意,我可以:
- 给你 CentOS 7 / 8 的区别
- 讲 ulimit 不生效的常见原因
- 针对 某个服务(如 MySQL / Java)给具体配置
你更关心哪一块?