百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Linux 下如何查看进程的资源限制信息?

ahcoder 2025-06-23 14:26 2 浏览

简介

Linux 上的 cat /proc/$pid/limits 命令提供有关特定进程的资源限制的信息,其中 $pid 是相关进程的进程 ID (pid)。该文件是 `/proc 文件系统的一部分,该文件系统是一个虚拟文件系统,提供有关进程和系统资源的信息。

基本用法

cat /proc/1234/limits

# 其中 1234 是目标进程的 PID。
  • $pid:目标进程的进程 ID(PID)。可以通过 ps 命令查找,例如 ps aux | grep <进程名>
  • 输出:显示指定进程的软限制(soft limit)、硬限制(hard limit)以及限制单位。

输出示例:

Limit                     Soft Limit           Hard Limit           Units
Max cpu time               unlimited            unlimited             seconds
Max file size              unlimited            unlimited             bytes
Max data size              unlimited            unlimited             bytes
Max stack size             8388608              8388608               bytes
Max core file size        0                    unlimited             bytes
Max resident set          unlimited            unlimited             bytes
Max processes             6348                 6348                  processes
Max open files            1024                 1024                  files
Max locked memory         65536                65536                 bytes
Max address space         unlimited            unlimited             bytes
Max file locks            unlimited            unlimited             locks
Max pending signals       6348                 6348                  signals
Max msgqueue size         819200               819200                bytes
Max nice priority         20                   20                    priority
Max realtime priority     99                   99                    priority
Max realtime timeout      unlimited            unlimited             us

关键字段解释

  • Max cpu time:该进程可以消耗无限量的 CPU 时间(没有上限)
  • Max file size:该进程可以创建任意大小的文件
  • Max data size:数据段(存储变量和数组)不受限制
  • Max stack size:堆栈大小限制为 8MB(8388608 字节),堆栈存储函数调用数据
  • Max open files:该进程最多可以同时打开 1024 个文件
  • Max processes:该进程最多可以产生 6348 个子进程

修改限制

  • ulimit:用于调整当前 shell 会话的限制
  • prlimit:用于对已经运行的进程设置限制
  • /etc/security/limits.conf:用于设置用户和组的默认资源限制

资源限制

这些是应用于进程的各种限制和约束,以控制其可以使用的资源,例如内存、CPU 和文件描述符。

此文件中列出的常见资源包括:

  • Limit:资源的实际限制
  • Current:该进程当前对该资源的使用情况
  • Soft Limit:当前应用于进程的限制,可以由进程进行调整(在硬限制范围内)
  • Hard Limit:不可超过的最大限制,它由系统管理员设置或采用默认设置
  • Units:衡量限制的单位(例如字节、KB 等)

常见的限制类型

  • Max process limit:用户可以创建的最大进程数。它限制了用户可以生成的进程数量
  • Max open files:进程可以拥有的最大文件描述符数量。这会影响进程可以同时打开的文件、套接字等的数量
  • Max locked memory:可以锁定到 RAM 中的最大内存量,防止其被换出
  • Max address space:进程可以分配的最大虚拟地址空间量,其中包括内存、堆和堆栈
  • Max CPU time:进程可使用的最大 CPU 时间。以秒为单位
  • Max file locks:进程可以拥有的文件锁的最大数量
  • Max number of threads:进程可以创建的最大线程数
  • Max user time:进程在用户空间中花费的最长时间(以秒为单位)(即不包括内核时间)
  • Max virtual memory:进程可以分配的虚拟内存总量,通常控制进程内存使用的上限
  • Max file size:进程创建文件的最大大小
  • Max data size:进程数据段的最大大小(包括堆和数据)
  • Max stack size:进程堆栈的最大大小
  • Max core file size:核心转储文件(core dump)的最大大小
  • Max resident set:驻留内存(RSS,物理内存)的最大大小
  • Max pending signals:进程可排队的最大信号数
  • Max msgqueue sizePOSIX 消息队列的最大大小
  • Max realtime priority:实时调度优先级的最大值
  • Max realtime timeout:实时任务的最大超时时间(微秒)

软限制与硬限制

  • 软限制:这是当前为进程设置的限制,进程可以更改它,管理员也可以使用 ulimit(用于 shell)或 prlimit(用于正在运行的进程)等命令更改它
  • 硬限制:这是除非超级用户 (root) 更改,否则无法超过的最大限制,硬限制由内核强制执行,它是软限制的上限

常见用法

检查进程资源限制

用于诊断进程是否因资源限制(如文件描述符不足)而失败:

cat /proc/$(pidof bash)/limits

查看当前 bash 进程的限制

查找文件描述符限制

检查进程的最大文件描述符数:

cat /proc/1234/limits | grep "Max open files"

输出示例:

Max open files            1024                 1048576              files

结合 ulimit 调整限制

ulimit 命令可修改当前 shell 的软限制(需要硬限制允许)。例如,增加文件描述符限制

ulimit -n 2048
cat /proc/$/limits | grep "Max open files"

监控系统限制

检查所有进程的限制模式

for pid in /proc/[0-9]*; do echo "PID: $(basename $pid)"; cat $pid/limits; done

诊断文件描述符不足

假设某个服务(PID 1234)报错 Too many open files

cat /proc/1234/limits | grep "Max open files"
lsof -p 1234 | wc -l

如果打开的文件数接近软限制,临时增加限制:

prlimit --pid 1234 --nofile=2048:1048576

或修改服务配置文件(如 systemdLimitNOFILE

检查核心转储

确保进程可以生成核心转储:

cat /proc/1234/limits | grep "Max core file size"

如果软限制为 0,启用核心转储:

ulimit -c unlimited

相关配置文件

/proc/$pid/limits 的值通常来自以下来源:

  • /etc/security/limits.conf:定义用户或组的默认资源限制
# 格式:<domain> <type> <item> <value>
* soft nofile 1024
* hard nofile 1048576

* 表示所有用户,nofile 对应 Max open files

  • /etc/security/limits.d/:包含额外的限制配置文件
  • 系统默认值:由内核参数或系统配置(如 /proc/sys/) 决定
  • ulimit 命令:动态修改当前 shell 或进程的软限制
  • systemd 配置:服务进程的限制可在 systemd 单元文件中的[Service] 快设置(例如 LimitNOFILE=2048

相关推荐

Linux 下如何查看进程的资源限制信息?

简介Linux上的cat/proc/$pid/limits命令提供有关特定进程的资源限制的信息,其中$pid是相关进程的进程ID(pid)。该文件是`/proc文件系统的一部分,该...

Linux入侵排查TOP10误区!90%工程师都踩过坑

导语“删除恶意文件却破坏了关键证据”“盲目重启系统导致攻击链中断”——这些看似合理的操作,可能让入侵排查陷入僵局。据统计,全球90%的Linux工程师在首次应对入侵事件时至少踩中3个排查误区。本文深度...

一文掌握怎么利用Shell脚本实现Linux系统资源监控管理程序

简介:在日常管理Linux服务器时,监控和管理系统资源是确保服务器稳定运行的关键。及时了解CPU、内存、硬盘以及网络的使用情况,可以帮助我们预防系统故障,并找出性能上的瓶颈。虽然有很多专业的监控工具,...

Linux 下的 PM2 完整指南(linuxnmcli)

PM2是Node.js应用的专业级进程管理器,专为生产环境设计,提供应用守护、集群管理、日志监控等核心功能。核心特性应用守护:崩溃时自动重启零秒重载:热更新应用不停机(pm2reload)...

linux中磁盘满了?一招教你快速清理

创作背景:当天部署服务时,发现无法部署,后来经过日志排查后发现服务器磁盘满了,查询资料后进行了清理。话不多说,直接上解决方法。操作一:1.查看磁盘大小:df-h2.直接在最上层进行排序:du-a...

适用于 Linux 的内存分析器:Bytehound

#暑期创作大赛#特征可用于分析内存泄漏,查看内存到底在哪里被消耗,识别临时分配并调查过多的内存碎片收集每次分配和释放以及完整的堆栈跟踪可以动态剔除临时分配,使您能够在很长一段时间内进行分析使用定制的堆...

一文讲清Python在Linux系统CPU、内存和磁盘管理方面的应用实例

摘要:在当今快速发展的IT运维和开发世界里,Linux系统凭借其高效能、高稳定性和开源的特性,在服务器管理、云计算服务以及大数据处理等众多领域中占据了核心位置。随着业务规模扩大,系统资源的监控与管理变...

Linux系统磁盘分区管理LVM概念及扩容操作

LVM的全称为LogicalVolumeManager,逻辑卷管理。它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过L...

ringbuffer 消息队列 内存池 性能优化利器

简约而不简单的ringbuffer最近在研究srsLTE的代码,其中就发现一个有意思的数据结构------ringbuffer。虽然,这是一个很基本的数据结构,但时,它在LTE这种通信协议栈系统中却大...

Rocky Linux 9常用命令备忘录(不定时更新)

RockyLinux9常用命令备忘录(不定时更新)大家好,我是星哥,上次介绍了<RockyLinux9系统安装配置图解教程并做简单配置>:https://mp.weixin.qq...

理解Linux的Memory overcommit(linux reserved-memory)

MemoryOvercommit的意思是操作系统承诺给进程的内存大小超过了实际可用的内存。一个保守的操作系统不会允许memoryovercommit,有多少就分配多少,再申请就没有了,这其实有些浪...

Linux systemd 4 命令深度对比:休眠、睡眠、关

"90%的人不知道Linux关机命令暗藏玄机?三招教你选对保命符"键盘突然没反应?电脑卡成PPT?这些崩溃瞬间可能都怪你选错了系统命令!今天就用咖啡厅偶遇的工程师视角,带你看懂Linu...

一次解决Linux内核内存泄漏实战全过程

什么是内存泄漏:程序向系统申请内存,使用完不需要之后,不释放内存还给系统回收,造成申请的内存被浪费.发现系统中内存使用量随着时间的流逝,消耗的越来越多,例如下图所示:接下来的排查思路是:1.监控系统中...

Linux系列:聊一聊 SystemV 下的进程间共享内存

一:背景1.讲故事昨天在分析一个linux的dump时,看到了这么一话警告,参考如下:0:000>!eeheap-gc***WARNING:Unabletoverifyt...

linux收发网络包过程(linux收包流程)

网络模型由于OSI模型实在太复杂,提出的也只是概念理论上的分层,并没有提供具体的实现方案事实上,我们比较常,也比较实用的是四层模型,即TCP/IP网络模型,Linux系统正是按照这套网络模型...