ulimit 管的是什么
ulimit 是 shell 的内建命令,用来查看和调整当前会话及其子进程能使用的资源上限,覆盖打开文件数、进程数、栈大小、核心转储大小等项目。它分软限制与硬限制两层:软限制是当前实际生效的阈值,硬限制是软限制能提到的高度。最关键的一点是作用范围——它只影响这个 shell 与它启动的进程,对已经在运行的服务毫无作用,那些进程的上限由它们启动时的环境决定。
基本信息
| 所属 | shell 内建命令,不依赖外部工具 |
|---|---|
| 作用范围 | 当前会话及其子进程 |
| 两层限制 | 软限制是实际阈值,硬限制是上限 |
| 查看全部 | 加查看全部选项可一次列出所有限制项 |
| 已运行进程 | 读进程的 limits 文件查看其真实上限 |
| 权限差异 | 普通用户只能降低,提高上限通常需要管理权限 |
典型使用场景
- 手工压测排障:在会话里临时提高打开文件数,验证是否为上限导致失败
- 确认当前阈值:排查连接异常前先看清会话里的实际限制
- 核对服务限制:读取运行中进程的限制信息,与服务配置比对
- 定位核心转储:确认核心转储大小是否被限制为零
- 验证配置生效:调整服务上限配置后确认进程实际取值
- 区分权限影响:确认普通账号与管理账号的限制差异
常用命令
常用命令
ulimit -n # 查看打开文件数上限
ulimit -a # 查看全部限制项
ulimit -Hn # 查看硬限制
ulimit -Sn # 查看软限制
ulimit -n 65535 # 临时提高(不得超过硬限制)
cat /proc/12345/limits # 查看某个已运行进程的实际限制
cat /proc/sys/fs/file-max # 查看系统级上限常用选项读法
| 选项 | 含义 | 使用提示 |
|---|---|---|
| -n | 打开文件数上限 | 高并发服务最常调整的一项 |
| -u | 可创建进程数上限 | 防止进程数爆炸时的重要约束 |
| -c | 核心转储文件大小 | 设为零表示不产生核心转储 |
| -s | 栈大小 | 过小可能导致程序异常终止 |
| -v | 虚拟内存上限 | 一般不建议随意收紧 |
| -H / -S | 硬限制与软限制 | 提高软限制前先确认硬限制余量 |
调整失败多半是因为没区分两层限制:软限制不能超过硬限制,普通用户只能在其范围内降低或小幅提升。要突破硬限制需要管理权限配合,且这种修改只在这个会话里有效,重启或重新登录后回到默认值。
已经在运行的服务不会因为你在会话里改了限制而变化,它的上限取自启动它的环境。排查服务遇到的文件句柄类报错时,应直接读取该进程的限制文件确认实际值,并通过服务单元里的资源上限设置来长期生效,而不是在命令行上调参数。