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 nameCPU 型号与主频
cache sizeL2 缓存大小
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

要点:

/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 数
10I/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/swappinessSwap 倾向性(0-100)
/proc/sys/net/ipv4/tcp_tw_reuseTIME_WAIT 复用
/proc/sys/kernel/pid_max最大 PID 值

参考链接: