Linux 怎样为单个进程查看资源限制
查看单个 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 和单位”作为一组信息保存下来。只读查询先把事实说清楚,设置则留到具备明确目标与恢复条件的独立变更中。
Linux 怎样用 findmnt 查看挂载来源和选项
- 上一篇
- Linux 怎样用 findmnt 查看挂载来源和选项
- 下一篇
- Linux 怎样用 lsblk JSON 输出设备层级
-
- 文章 · linux | 1小时前 |
- Linux 怎样读取 cgroup v2 内存压力事件
- 144浏览 收藏
-
- 文章 · linux | 1小时前 | Linux · 安全 · Linux systemd capability CapabilityBoundingSet
- Linux 服务怎样按 capability 缩小权限
- 121浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux pidfd 怎样减少 PID 重用误杀风险
- 272浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux 怎样用 lsblk JSON 输出设备层级
- 467浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux ARP 邻居状态异常怎样读取和刷新
- 442浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux 怎样用 ss 区分监听与已连接套接字
- 279浏览 收藏
-
- 文章 · linux | 1小时前 | Linux · systemd EnvironmentFile Linux服务环境变量
- Linux 服务怎样安全加载环境文件
- 434浏览 收藏
-
- 文章 · linux | 1小时前 | Linux · Linux journalctl 日志过滤 systemd日志 启动轮次 BOOT_ID
- Linux 怎样按启动轮次筛选 systemd 日志
- 465浏览 收藏
-
- 文章 · linux | 1小时前 | 服务管理 · Linux systemd systemd.socket ListenStream Accept socket activation systemd.service
- Linux socket 激活怎样把监听职责交给 systemd
- 376浏览 收藏
-
- 文章 · linux | 1小时前 |
- Linux 怎样用 systemd-analyze 找启动瓶颈
- 123浏览 收藏
-
- 文章 · linux | 19小时前 |
- Linux /proc 读取进程内存指标的方法
- 194浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 511次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 571次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 597次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 549次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 365次使用
-
- Linux vmstat 如何分辨内存抖动与磁盘等待:si、so、wa 与复测顺序
- 2026-08-30 501浏览
-
- Linux搭建vsftpdFTP服务器教程
- 2026-04-30 501浏览
-
- Shell脚本安装教程:.sh一键安装指南
- 2026-03-16 501浏览
-
- Linux清空文件内容的几种方法
- 2025-12-01 501浏览
-
- Linux命令行下载文件技巧
- 2025-11-23 501浏览
