本文翻译自我的英文博客,最新修订内容可随时参考:Further Understanding of Proc
Linux 中的 /proc 是一种伪文件系统(又称虚拟文件系统),它存储的是一系列特殊文件,这些文件记录了内核当前的运行状态。用户不仅可以通过这些文件查看硬件信息和运行中的进程,甚至可以通过修改某些文件来调整内核的运行状态。 /proc 中的文件实时刷新于内存,因此文件大小均为 0 字节。
官方文档参考:here
数字命名的目录
/proc 中许多目录以数字命名,这些数字代表正在运行的进程的 PID(进程标识符)。以下是一些关键子项:
- cmdline:进程的命令行参数。
- environ:进程的环境变量。
- fd:进程打开的文件描述符(可通过符号链接查看具体文件)。
- maps:进程的内存映射信息(如代码段、数据段、共享库等)。
- mem:进程的内存使用情况(需配合调试工具读取)。
- root:指向进程的根目录的符号链接(需
chroot 环境支持)。 - status:进程状态信息(可读性较高,包含 CPU 占用、内存占用等)。
- stat:进程的详细状态(
ps 命令的数据来源之一)。 - task:进程中的线程信息(每个线程对应一个以 TID 命名的子目录)。
/proc/sys 目录
该目录用于动态修改内核参数(即 sysctl 参数)。通过向目录中的文件写入值,可以实时调整内核行为,例如:
echo 1 > /proc/sys/net/ipv4/ip_forward # 开启 IP 转发(等价于 sysctl -w net.ipv4.ip_forward=1)
常用文件解析
/proc/apm
存储高级电源管理(APM)版本信息和电池状态(如剩余电量、充电状态),通常由 apm 命令调用。
/proc/buddyinfo
显示内核内存分配器中的空闲内存块信息,用于分析内存碎片化问题。
/proc/cmdline
显示内核启动时接收的参数(如 root=/dev/sda1 rw quiet),可用于排查启动配置问题。
/proc/cpuinfo
包含 CPU 详细信息(如型号、核心数、主频、指令集等),等价于 lscpu 命令的部分输出。
/proc/loadavg
显示系统负载平均值,与 uptime 命令输出一致:
cat /proc/loadavg
# 2.79 2.99 3.03 5/349 3582467
- 前三个值:过去 1 分钟、5 分钟、15 分钟的平均负载(理想值应小于 CPU 核心数)。
- 第四个值:当前运行队列中的进程数 / 系统最大进程数。
- 第五个值:最后一个创建的进程 PID。
/proc/meminfo
提供内存使用详情(如总内存、空闲内存、缓冲/缓存大小等),free 命令即基于此文件数据:
cat /proc/meminfo | grep Mem
MemTotal: 16384000 kB
MemFree: 2345672 kB
MemAvailable: 12345678 kB
/proc/stat
记录系统资源统计信息,核心字段包括:
- cpu:CPU 各状态的累计时间(用户态、内核态、空闲、I/O 等待等,单位为 jiffies)。
- page:内存页换入/换出次数(反映内存压力)。
- swap:交换空间使用次数。
- ctxt:上下文切换次数(过高可能表明进程调度频繁)。
- processes:系统启动以来创建的进程总数。
/proc/uptime
- 第一列:系统运行总时间(秒)。
- 第二列:所有 CPU 核心的空闲时间总和(多核系统中该值可能大于运行时间)。
/proc/version
显示内核版本、编译时间及 GCC 版本,例如:
Linux version 5.15.0-58-generic (builduser@buildfarm) (gcc version 11.3.0 (Ubuntu 11.3.0-1ubuntu1~22.04)) #64-Ubuntu SMP Thu Jun 8 09:44:52 UTC 2023
其他重要文件
| 文件路径 | 作用描述 |
|---|---|
| /proc/diskstats | 磁盘设备的 I/O 统计信息(如读写次数、耗时、吞吐量)。 |
| /proc/interrupts | 中断请求统计(按中断号和设备分类,用于排查硬件中断异常)。 |
| /proc/locks | 显示当前系统持有的锁信息(如文件锁、内核锁)。 |
| /proc/mounts | 当前系统的挂载点信息(等价于 mount 命令输出)。 |
| /proc/modules | 已加载的内核模块列表(等价于 lsmod 命令)。 |
| /proc/vmstat | 虚拟内存统计信息(如页面错误、交换活动等)。 |
总结
/proc 是 Linux 内核的“窗口”,通过它可以深入了解系统运行状态、诊断性能问题或动态调整内核行为。熟练掌握 /proc 中的关键文件(如 loadavg、meminfo、stat),能极大提升系统管理和故障排查的效率。如需修改内核参数,建议通过 sysctl 命令操作 /proc/sys 下的文件,以避免误操作导致系统不稳定。