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

简介

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

基本用法

shell 复制代码
cat /proc/1234/limits

# 其中 1234 是目标进程的 PID。
  • $pid:目标进程的进程 ID(PID)。可以通过 ps 命令查找,例如 ps aux | grep <进程名>

  • 输出:显示指定进程的软限制(soft limit)、硬限制(hard limit)以及限制单位。

输出示例:

shell 复制代码
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) 更改,否则无法超过的最大限制,硬限制由内核强制执行,它是软限制的上限

常见用法

检查进程资源限制

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

shell 复制代码
cat /proc/$(pidof bash)/limits

查看当前 bash 进程的限制

查找文件描述符限制

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

shell 复制代码
cat /proc/1234/limits | grep "Max open files"

输出示例:

shell 复制代码
Max open files            1024                 1048576              files

结合 ulimit 调整限制

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

shell 复制代码
ulimit -n 2048
cat /proc/$$/limits | grep "Max open files"

监控系统限制

检查所有进程的限制模式

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

诊断文件描述符不足

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

shell 复制代码
cat /proc/1234/limits | grep "Max open files"
lsof -p 1234 | wc -l

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

shell 复制代码
prlimit --pid 1234 --nofile=2048:1048576

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

检查核心转储

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

shell 复制代码
cat /proc/1234/limits | grep "Max core file size"

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

shell 复制代码
ulimit -c unlimited

相关配置文件

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

  • /etc/security/limits.conf:定义用户或组的默认资源限制
shell 复制代码
# 格式:<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

相关推荐
挺6的还3 小时前
15.进程间通信(一)
linux
一个不知名程序员www4 小时前
Linux基本指令/下
linux·服务器·centos
zhcong_5 小时前
LVS+Keepalived高可用群集
linux·运维·lvs
Angel Q.5 小时前
系统是win11+两个ubuntu,ubuntu20.04和ubuntu22.04,想删除ubuntu20.04且不用保留数据
linux·运维·ubuntu
JzjSunshine5 小时前
配置远程无密登陆ubuntu服务器时无法连接问题排查
linux·运维·ubuntu
爱奥尼欧5 小时前
【Linux】环境变量完全解析
linux·运维·服务器
运维成长记6 小时前
ansible-playbook 进阶 接上一章内容
linux·服务器·ansible
愚润求学7 小时前
【Linux】mmap文件内存映射
linux·运维·服务器·开发语言·c++
就是我8 小时前
轻松管理Linux定时任务:Cron实用教程
linux·后端
hope_wisdom8 小时前
Linux系统编程之共享内存
linux·共享内存·linux系统·linux编程