← 返回图谱目录

原理图解 · v1.0 · 13 个模块

Linux /proc 与 /sys 目录实战说明图

从常用命令进入内核接口:找进程、看设备、核对 cgroup 资源限制。

下载 SVG 原图
1.0×
点击框内区域,展开模块说明拖动平移 · 滚轮 / 双指缩放

读图提示

看指标,也看现场。

命令中的 PID、SERVICE、IFACE 等占位符需替换为实际值。图中的分隔符用于列出独立检查项;复制按钮已按单条命令整理。结合业务影响、基线和时间窗口判断。

图谱署名:老男孩教育-李导996 · v1.0 · 2026-10-22

来源与参考

按图内已有来源整理。模块文字与命令来自本图,未添加新的教学案例。

下载原始 SVG,保留完整署名与说明 ↗
展开全部模块文字版

/proc、/sys 与内核接口

以目录和文件形式提供内核接口,观察进程状态、设备模型和资源控制。

判断依据

  • /proc:进程现场、系统运行信息、部分内核参数;通常挂载 proc 文件系统。
  • /sys:设备、驱动、内核对象及其属性关系;通常挂载 sysfs。
  • 先用常用命令定位,再查原始接口;工具也可能通过 netlink / ioctl 与内核交互。

注意事项

  • 多数内容在读取时生成,不是普通磁盘数据文件。
  • /proc 并非只存进程,也并非全部只读;/sys 包含物理设备、虚拟设备及其他内核对象。

01 /proc/PID:进程现场

先用 ps / top 找到实际 PID,排查进程为什么异常。

命令

cat /proc/PID/limits
ls -l /proc/PID/fd
readlink -f /proc/PID/exe
tr '\0' ' ' < /proc/PID/cmdline

判断依据

  • status → State、PPid、Threads、VmRSS 等状态
  • limits → 当前进程已生效的资源软限制 / 硬限制
  • fd/ → FD 到文件、pipe、socket 等对象的链接
  • exe / cwd / cmdline → 程序位置、工作目录、启动参数

注意事项

  • PID 须替换为实际进程编号。

01 /sys/class/net:网卡属性

先用 ip -br link 找接口名,检查网卡属性和累计统计。

命令

ip -br link
cat /sys/class/net/IFACE/operstate
ip -s link show dev IFACE
ethtool -S IFACE

判断依据

  • operstate / carrier → 接口运行状态 / 链路载波状态
  • statistics/ → rx_bytes、tx_bytes、rx_dropped 等累计值
  • device → 设备关联(并非所有虚拟接口都有)

注意事项

  • 接口 MTU 不等于整条路径的 MTU。
  • IFACE 须替换为实际接口名。

02 /proc:系统运行统计

把指标读回含义:CPU 时间、可用内存、I/O 累计值、资源等待。

命令

mpstat -P ALL 1 5
free -h
iostat -xz -y 1 5

判断依据

  • /proc/stat、/proc/loadavg → CPU 时间计数 / 负载
  • /proc/meminfo、/proc/vmstat → 内存概况 / 虚拟内存统计
  • /proc/diskstats → 块设备累计 I/O 统计
  • /proc/pressure/{cpu,memory,io} → 资源压力 PSI(需内核支持)

注意事项

  • 累计值应采样求差:速率 =(本次计数 − 上次计数)÷ 间隔秒数。
  • PSI 需内核支持。

02 /sys/class/block:块设备

检查磁盘类型、排队方式以及设备层次。

命令

cat /sys/class/block/DEV/queue/scheduler
readlink -f /sys/class/block/DEV
lsblk -o NAME,TYPE,SIZE,ROTA

判断依据

  • queue/scheduler → 可用 I/O 调度器;方括号标出当前项
  • queue/rotational → 设备上报的旋转属性,不能直接判断性能
  • stat → 块设备累计 I/O 计数
  • 目录链接 → 可追溯到 /sys/devices 下的设备层次

注意事项

  • DEV 选整盘设备,例如 sda / nvme0n1;分区不一定有 queue。

03 /proc/sys 与命名空间

核查参数和视图是否一致;/proc/sys 和 /sys 是两套不同接口。

命令

sysctl -n net.core.somaxconn
cat /proc/sys/net/core/somaxconn
findmnt -T /proc

判断依据

  • /proc/sys/ → 支持 sysctl 的运行时内核参数
  • /proc/sys/net/core/somaxconn ↔ net.core.somaxconn
  • /proc/net/ → 当前进程所在网络命名空间的信息
  • /proc/self/mountinfo → 当前进程的挂载视图

注意事项

  • /proc/sys 是 /proc 的子目录。
  • /proc/self 始终指向正在读取它的进程。

03 /sys:设备与驱动关系

同一设备可从不同入口查到;class 中的许多项是符号链接。

命令

readlink -f /sys/class/net/IFACE
cat /sys/devices/system/cpu/online
findmnt -T /sys

判断依据

  • /sys/devices/、/sys/class/ → 设备层次 / 按功能分类的入口
  • /sys/bus/ → 总线、设备和驱动的关系
  • /sys/devices/system/cpu/online → 在线 CPU 列表,不是容器配额
  • /sys/module/MODULE/parameters/ → 模块暴露的参数(按需)

注意事项

  • 路径和属性随硬件、驱动、内核配置变化。

从进程定位 cgroup v2

从进程找到目标资源组,查看限额、计数增量与业务表现。

命令

findmnt -T /sys/fs/cgroup
cat /proc/PID/cgroup
systemctl show SERVICE -p ControlGroup --value

判断依据

  • FSTYPE 为 cgroup2 时,再按图中 cgroup v2 文件排查;结合宿主机挂载点找目标组。
  • CPU:cpu.max:配额 / 周期(微秒);max 表示本级不限。 cpu.stat:nr_throttled、throttled_usec 看增量。 200000 100000 ≈ 2 核时间预算,并非绑核。
  • 内存:memory.current / memory.max:用量 / 上限。 memory.events:关注 max、oom、oom_kill。 结合内核日志与容器事件确认 OOM 来源。
  • I/O:io.stat:按设备查看累计 I/O。 io.max:查看本组配置的 I/O 限制。 配合 iostat、I/O PSI 和业务时延判断。

注意事项

  • /sys/fs/cgroup 通常另行挂载 cgroup 文件系统。
  • 同时核查父级限制;容器内 PID、cgroup 路径与可见挂载可能不同。控制器未启用或权限受限时,部分文件可能不可见。

案例 A:Too many open files

找到 Nginx 报错的 worker PID,核对句柄数量和已生效限制。

命令

cat /proc/PID/limits
ls -1 /proc/PID/fd | wc -l
ls -l /proc/PID/fd

判断依据

  • ls -l /proc/PID/fd 看对象类型。
  • 判断:句柄数、软限制与错误时间是否对应?

注意事项

  • 先查泄漏或容量;修改后核对新进程限制。

案例 B:网站慢与网卡丢包

找到请求实际经过的接口,核对网卡错误与业务异常时间。

命令

ip -s link show dev IFACE

判断依据

  • 查看 statistics/rx_dropped 等字段;按固定间隔再采样,对比增量。
  • 判断:错误增量是否与业务异常同时发生?

注意事项

  • 链路 UP、累计值非零都不能单独定根因。

案例 C:主机空闲但容器受限

找到宿主机 PID 与目标组路径 CG,检查容器变慢或重启。

命令

cat CG/cpu.max
cat CG/cpu.stat
cat CG/memory.events

判断依据

  • 核对父级限制、内核日志与 Pod 事件。
  • 判断:节流 / OOM 是否落在故障时间窗?

注意事项

  • 通过 systemd / 容器部署配置修复并验证。
  • CG 须替换为目标资源组的实际路径。

读图与操作边界

把接口、设备、配置分清。

命令

ss -ntpe

判断依据

  • /dev/sda 是设备节点;/sys/class/block/sda 展示设备属性。
  • 虚拟文件 ls -l 显示 0 字节,仍可能读出内容;不靠 du 判容量。
  • /proc/PID/net 是该进程所在网络命名空间,不是其专属连接表。
  • 看进程连接可结合 ss -ntpe 与 /proc/PID/fd 的 socket:[inode]。

注意事项

  • 部分文件可写;写入会作用于内核,不能按普通文件随意改。
  • 运行时修改通常不持久;sysctl 参数固化到 /etc/sysctl.d/。
  • 设备属性与 cgroup 由对应服务 / 部署配置管理;变更后回读。
  • PID / IFACE / DEV / MODULE / SERVICE / CG 须替换;按权限读取。

30 秒复述与现场练习

进程与运行信息查 /proc;设备属性查 /sys;资源限额查目标 cgroup。

判断依据

  • 现场练习:老师示范查一个 PID → 共同核对网卡 → 遮图独立查句柄 → 换成容器场景,解释为何主机空闲仍可能受限。
  • 复习落点:每卡说出一条证据;课末遮图复述;阶段排障重做;后续 Docker / K8s 再查。每个命令独立执行,中文分号用于分隔。

注意事项

  • 每个命令独立执行,中文分号用于分隔。