Linux 怎样为单个进程查看资源限制
来源:17golang原创
时间:2026-10-18 02:26:34 228浏览 收藏
查看单个 Linux 进程的资源限制,可以用 prlimit --pid PID;只查文件描述符限制时加 --nofile,但不要加等号和值。输出中的 SOFT 是软限制,HARD 是硬上限,它们不是当前资源使用量。想看完整文本,也可以读取该进程的 /proc/PID/limits。
util-linux 官方项目地址:https://github.com/util-linux/util-linux;prlimit 上游手册:https://github.com/util-linux/util-linux/blob/master/sys-utils/prlimit.1.adoc。系统调用语义可参照 Linux man-pages:https://man7.org/linux/man-pages/man2/getrlimit.2.html。以下命令未在本机执行,没有真实故障记录或实测数值。
我会先固定 PID,而不是先调高一个数字
以“后台工作进程打开文件失败”这个假设场景来说,我更关心的是工作进程实际继承了什么限制,而不是当前终端允许打开多少文件。这是我的排查取舍,不是一次亲历生产事故的复盘。Shell 与服务可能由不同入口启动,拿终端的 ulimit 代替服务 PID 的结果,容易把问题带偏。
先从现有服务管理或进程记录确认目标 PID、程序身份和启动时间。多工作进程的服务要确认具体工作进程,不能把主进程的一份输出当成所有成员的共同证据。PID 还可能在退出后被复用,查询前后都要注意目标是否还是同一进程。
只查限制时,我保留最少的参数
# 例中 PID 只是占位,先替换成已确认身份且有权查看的目标进程。 resource_pid=24680 # 不带资源赋值,仅列出该进程的资源限制。 prlimit --pid "$resource_pid" # 只查询文件描述符限制,并明确要求输出列。 prlimit --pid "$resource_pid" --nofile --output RESOURCE,SOFT,HARD,UNITS # proc 文件提供另一种只读入口,仍需有相应访问权限。 cat "/proc/$resource_pid/limits"
第一条取得总体限制,第二条收窄到 NOFILE,并保留单位。上游手册说明输出列可用 --help 查询;发行版附带版本有差异时,应以本机帮助列出的支持项为准,不要为了一种输出样式直接升级生产工具。proc 入口更适合人工查看,不必为了截一行再拼接脆弱的固定列号解析。
| 选择 | 适合目的 | 我的取舍 |
|---|---|---|
| prlimit --pid | 查看进程资源限制 | 适合作为首次总览 |
| prlimit 加资源选项 | 只追查一项限制 | 保留软值、硬值与单位,减少误读 |
| /proc/PID/limits | 直接读取进程限制文本 | 适合人工对照,但仍有权限与生命周期约束 |
静态关系中,PID 标识目标进程;prlimit 和 /proc/PID/limits 是两种查询入口;SOFT 与 HARD 是该进程限制的两个值。图里没有资源当前用量,也没有把命令输出伪造成服务器截图。

最容易让我停下来确认的,是资源含义和单位
我不会把所有限制都叫“进程配额”。NOFILE 对应可打开的文件描述符编号范围上限,并非此刻已经打开的数量;NPROC 虽然出现在某个 PID 的限制表里,Linux 的计数语义涉及真实用户 ID 下的进程或线程,不能直接解释成“这个进程独享这么多个子进程”。
同样,AS 是虚拟地址空间限制,不等于已驻留物理内存;CPU 是累计 CPU 时间限制,不是 CPU 使用率百分比。看到 unlimited 也只意味着该项 rlimit 没有有限数值上限,不意味着机器、服务环境和其他控制层都无限。对我来说,先弄清限制约束的对象,比先判断数字大不大更有价值。
SOFT 通常是对应资源被执行的当前限制,HARD 则约束软限制可以调整到的范围。软值不能超过硬值。当前资源消耗还需用相应观测手段单独查看;仅有 prlimit 一行不能证明文件句柄泄漏,也不能证明某个配置值适合生产负载。
如果确实要调整,我会把它当作独立变更
查询与设置的分界就在资源选项后有没有赋值。--nofile 是查询;--nofile=soft:hard 是设置。单个 value 会同时设置软硬值;soft 后带冒号只改软值,冒号后给 hard 则只改硬值。为了避免误降硬上限,我倾向先只读取得现有值,再按批准的变更目标讨论是否修改。
# 下面函数只展示修改语法,不自动调用;仅限已批准的独立测试进程。
set_demo_soft_limit() {
demo_pid="$1"
demo_soft="$2"
# 尾部冒号表示只改软限制,硬限制保持原值;先确认软值不高于现有硬值。
prlimit --pid "$demo_pid" --nofile="${demo_soft}:"
}
# 本文不提供调用示例,避免把演示数值当成生产建议。
这段只是语法示意,定义函数并不会修改任何进程。需要执行时,必须另外确认测试 PID、数值、权限、原值记录和恢复方案。普通权限下,降低硬限制后通常不能再自行升回原值;不能把“先降下来试试看”描述成总能无损回退。调高硬限制还受所需能力及系统边界约束,不是加一个更大数字就一定成功。
设置关系可以分成“输入语法”与“约束规则”:soft:、:hard 和 value 分别描述修改哪些值,软限制与硬限制承担不同职责,权限条件决定允许的修改范围。它们不是自动化执行流水线。

这套方法适合现场观察,不替代启动策略
我的选择是:临时定位用 PID 查询,长期配置回到实际启动入口。修改运行中进程不等于把默认值写进服务配置;进程重启后要观察新的 PID。子进程在创建时继承限制,但不能据此认定修改父进程就追溯修改了所有既有子进程。
查询失败时保留错误本身:进程不存在与权限不足是两类问题。不要通过不断提权来掩盖目标 PID 选错;容器或其他隔离环境中,还要注意自己所处的进程观察范围。本文没有执行修改,也不声称一条命令解决所有资源不足问题。
没有写 --pid,会默认查业务进程吗?
不会自动猜业务进程。没有指定 PID 且没有附加要运行的命令时,prlimit 操作自身运行进程,不能拿结果当作后台服务限制。
SOFT 比 HARD 小,是配置错误吗?
不一定。这本来就是允许的关系,硬值提供软值调整的上界。是否需要提高软值,要结合真实负载与批准的运行策略判断。
限制表里的数值就是当前使用量吗?
不是。限制与消耗要分别记录,并确认它们的单位、计数范围和采样时间,才有条件讨论是否触及上限。
对单进程排查,我会把“PID 身份、资源含义、SOFT/HARD 和单位”作为一组信息保存下来。只读查询先把事实说清楚,设置则留到具备明确目标与恢复条件的独立变更中。
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
144 收藏
-
121 收藏
-
272 收藏
-
467 收藏
-
136 收藏
-
442 收藏
-
279 收藏
-
434 收藏
-
465 收藏
-
文章 · linux | 1小时前 | 服务管理 · Linux systemd systemd.socket ListenStream Accept socket activation systemd.service376 收藏
-
123 收藏
-
194 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习