Linux /proc 文件系统详解
七月 18, 2026 [Linux] #linux #proc #系统管理/proc 是一个伪文件系统(procfs),由内核动态生成,用于暴露系统运行状态。读取这些文件无需特殊工具,cat 即可——这也是排查问题最快的手段。
CPU 信息
/proc/cpuinfo
每颗逻辑核一个段落,常用字段:
| 字段 | 含义 |
|---|---|
processor | 逻辑核编号(从 0 开始) |
physical id | 物理 CPU 编号 |
cpu cores | 每颗物理 CPU 的核数 |
siblings | 单颗物理 CPU 的逻辑核数(含超线程) |
core id | 当前核在物理 CPU 中的编号 |
model name | CPU 型号与主频 |
cache size | L2 缓存大小 |
flags | 支持的 CPU 特性(如 aes, avx2) |
常用统计命令:
# 物理 CPU 个数
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
# 每颗 CPU 的核数
cat /proc/cpuinfo | grep "cpu cores" | uniq
# 逻辑 CPU 总数
cat /proc/cpuinfo | grep "processor" | wc -l
# CPU 型号
cat /proc/cpuinfo | grep "model name" | uniq
总核数 = 物理 CPU 数 × 每颗核数;总逻辑 CPU 数 = 物理 CPU 数 × 每颗核数 × 超线程数。
/proc/uptime
系统运行时长与空闲时间:
cat /proc/uptime
# 406988.68 15804134.45
# 第一个值:系统启动至今的秒数
# 第二个值:所有 CPU 累计空闲的秒数(需除以逻辑核数)
/proc/version
内核版本号与编译信息:
cat /proc/version
/proc/cmdline
内核启动参数:
cat /proc/cmdline
# BOOT_IMAGE=/vmlinuz-5.15.0-generic root=/dev/mapper/root ro console=tty0 console=ttyS0,115200
内存信息
/proc/meminfo
内存使用概况(总量、空闲、缓存、Swap 等):
cat /proc/meminfo
dmidecode -t memory
查看物理内存条型号、频率、容量(需 root):
sudo dmidecode -t memory
输出示例:
Memory Device
Size: 16384 MB
Type: DDR3
Speed: 1600 MT/s
Manufacturer: Hynix
Part Number: HMT42GR7AFR4C-RD
/proc/iomem
物理地址空间分配,包含 DDR、PCI Bus、ACPI Tables、ROM 等区域的地址映射:
sudo cat /proc/iomem
00000000-00000fff : Reserved
00001000-0009fbff : System RAM
...
100000000-38cafffff : System RAM
20ee00000-20fe025c7 : Kernel code
210000000-210a87fff : Kernel rodata
210c00000-2110455ff : Kernel data
211393000-2119fffff : Kernel bss
要点:
- DDR 物理内存在地址空间上不一定连续,也不一定从 0 开始
- 除 System RAM 外还有 PCI Bus、System ROM 等 I/O 内存区域
- 可查看内核代码段、数据段在物理内存中的位置
/proc/ioports
内核 IO 端口地址分配:
cat /proc/ioports
调整内存分配策略
# 查看当前 overcommit 策略
cat /proc/sys/vm/overcommit_memory
# 0 - 检查可用内存,不足则拒绝
# 1 - 始终允许,不检查
# 2 - 允许超过(物理内存 + 交换空间)总和
echo 2 > /proc/sys/vm/overcommit_memory
echo 60 > /proc/sys/vm/overcommit_ratio
磁盘与 IO
/proc/diskstats
磁盘 I/O 统计,iostat、iotop 等工具的数据来源:
cat /proc/diskstats
各字段含义(按列顺序):
| 列 | 含义 |
|---|---|
| 1 | 读完成次数 |
| 2 | 合并读次数 |
| 3 | 读扇区数 |
| 4 | 读耗时(ms) |
| 5 | 写完成次数 |
| 6 | 合并写次数 |
| 7 | 写扇区数 |
| 8 | 写耗时(ms) |
| 9 | 正在处理的 I/O 数 |
| 10 | I/O 总耗时(ms),field 9 不为 0 时增长 |
| 11 | 加权 I/O 耗时(ms),每次 I/O 开始/结束/合并时累加 |
中断
/proc/interrupts
每个 IRQ 在各 CPU 上的中断次数:
cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3
0: 205 0 0 0 IO-APIC-edge timer
1: 10 0 0 0 IO-APIC-edge i8042
4: 1467 0 0 432 IO-APIC-edge serial
从左到右:IRQ 序号、各 CPU 中断次数、中断控制器类型、设备名称。
/proc/stat
系统全局统计,包含总中断数:
cat /proc/stat | grep "intr"
# intr 598618187 205 10 0 0 ...
第一个数字为总中断数,其后依次为各 IRQ 的中断次数(从 0 开始)。
内核与调试
/proc/kallsyms
内核符号表,用于调试和跟踪:
cat /proc/kallsyms
# 非 root 用户看到的地址为 0
/proc/modules
已加载的内核模块列表。
/proc/slabinfo
Slab 分配器使用情况(内核对象缓存)。
/proc/sys 内核参数
/proc/sys/ 下包含了大量可调内核参数,通过 sysctl 或直接写文件生效:
# 查看所有可调参数
sysctl -a
# 临时修改
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1
常用内核参数路径:
| 路径 | 作用 |
|---|---|
/proc/sys/vm/dirty_ratio | 脏页触发写回的阈值 |
/proc/sys/vm/swappiness | Swap 倾向性(0-100) |
/proc/sys/net/ipv4/tcp_tw_reuse | TIME_WAIT 复用 |
/proc/sys/kernel/pid_max | 最大 PID 值 |
参考链接: