当前位置:首页 > 文章列表 > 文章 > linux > Linux 怎样为单个进程查看资源限制

Linux 怎样为单个进程查看资源限制

来源:17golang原创 2026-10-18 02:26:34 0浏览 收藏

查看单个 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 是该进程限制的两个值。图里没有资源当前用量,也没有把命令输出伪造成服务器截图。

目标进程与两种限制查询入口的静态关系
图1:结构说明图。观察入口分组说明 PID 与查询方式,限制对象分组呈现目标进程、软限制和硬限制,连线不表示执行顺序。

最容易让我停下来确认的,是资源含义和单位

我不会把所有限制都叫“进程配额”。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 分别描述修改哪些值,软限制与硬限制承担不同职责,权限条件决定允许的修改范围。它们不是自动化执行流水线。

资源限制设置语法与软硬上限约束的静态关系
图2:结构说明图。语法分组与约束分组分开阅读,尤其注意 value 同时触及两个值,不能误认为仅修改软限制。

这套方法适合现场观察,不替代启动策略

我的选择是:临时定位用 PID 查询,长期配置回到实际启动入口。修改运行中进程不等于把默认值写进服务配置;进程重启后要观察新的 PID。子进程在创建时继承限制,但不能据此认定修改父进程就追溯修改了所有既有子进程。

查询失败时保留错误本身:进程不存在与权限不足是两类问题。不要通过不断提权来掩盖目标 PID 选错;容器或其他隔离环境中,还要注意自己所处的进程观察范围。本文没有执行修改,也不声称一条命令解决所有资源不足问题。

没有写 --pid,会默认查业务进程吗?

不会自动猜业务进程。没有指定 PID 且没有附加要运行的命令时,prlimit 操作自身运行进程,不能拿结果当作后台服务限制。

SOFT 比 HARD 小,是配置错误吗?

不一定。这本来就是允许的关系,硬值提供软值调整的上界。是否需要提高软值,要结合真实负载与批准的运行策略判断。

限制表里的数值就是当前使用量吗?

不是。限制与消耗要分别记录,并确认它们的单位、计数范围和采样时间,才有条件讨论是否触及上限。

对单进程排查,我会把“PID 身份、资源含义、SOFT/HARD 和单位”作为一组信息保存下来。只读查询先把事实说清楚,设置则留到具备明确目标与恢复条件的独立变更中。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Linux 怎样用 findmnt 查看挂载来源和选项Linux 怎样用 findmnt 查看挂载来源和选项
上一篇
Linux 怎样用 findmnt 查看挂载来源和选项
Linux 怎样用 lsblk JSON 输出设备层级
下一篇
Linux 怎样用 lsblk JSON 输出设备层级
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    511次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    571次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    597次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    549次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    365次使用