“Linux 一切皆文件(Everything is a file)”
而 /proc 文件系统,就是这句话最极致的体现之一。
如果你是后端工程师、SRE、系统开发者、性能工程师,那么 /proc 目录几乎每天都会用到。
例如:
top 如何获取 CPU 使用率?
free 如何计算内存?
ps 如何知道进程状态?
docker stats 为什么能拿到容器资源?
答案几乎全部来自 /proc 文件系统。
本文将带你 系统理解 /proc 的设计原理 + 必知目录 + 实战用法。
/proc 是 Linux 的一种 虚拟文件系统(pseudo filesystem)。
它由 Linux 内核在运行时动态生成,不占磁盘空间。
特点:
查看类型:
mount | grep proc输出:proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)/proc├── cpuinfo├── meminfo├── uptime├── stat├── loadavg├── version├── vmstat├── net├── sys├── self├── 1├── 2345└── ...
可以分为 3 类内容:下面是 工程师最常用的 /proc 文件。
/proc/cpuinfo查看 CPU 信息。
cat /proc/cpuinfo输出示例:processor : 0vendor_id : GenuineIntelcpu family : 6model name : Intel(R) Xeon(R)cpu cores : 8
常用查看:CPU 核数
grep processor /proc/cpuinfo | wc -lCPU型号grep "model name" /proc/cpuinfo | head -1/proc/meminfo系统内存信息。
cat /proc/meminfo关键字段:MemTotalMemFreeMemAvailableBuffersCachedSwapTotalSwapFree
例如:grep MemAvailable /proc/meminfofree 命令就是读取这个文件。/proc/stat系统整体运行统计。
cat /proc/stat输出:cpu 4705 150 2260 1362393 234 0 90 0cpu0 1132 40 567 340123 45 0 10 0
字段:usernicesystemidleiowaitirqsoftirqsteal
top、sar、htop都是基于这个文件计算 CPU 使用率。
/proc/loadavg系统负载。
cat /proc/loadavg输出:0.52 0.58 0.61 1/534 12345含义:/proc/uptime系统运行时间。
cat /proc/uptime输出:123456.78 98765.43含义:/proc/vmstat虚拟内存统计。
cat /proc/vmstat关键字段:pgfaultpgmajfaultpgpginpgpgoutpswpinpswpout
常用于 内存和 swap 监控。/proc/net网络相关信息。
ls /proc/net常见文件:例如查看 TCP 连接:
cat /proc/net/tcpss和netstat都是读取这里。
/proc 里最有意思的部分就是:
/proc/<PID>例如:/proc/1234里面是 进程运行时信息。/proc/<pid>/cmdline启动命令:
cat /proc/1234/cmdline输出:java -jar app.jar/proc/<pid>/status进程详细信息:
cat /proc/1234/status示例:Name: javaState: S (sleeping)VmSize: 2048000 kBVmRSS: 512000 kBThreads: 32
常用于 排查 Java 内存问题。/proc/<pid>/fd进程打开的文件。
ls /proc/1234/fd输出:0 -> /dev/null1 -> /var/log/app.log2 -> /var/log/app.log
查看文件:
ls -l /proc/1234/fd这也是 lsof 的实现原理之一。/proc/<pid>/maps进程内存布局。
cat /proc/1234/maps示例:00400000-00452000 r-xp /usr/bin/java7f7c4c000000-7f7c4c021000 rw-p
常用于:JVM 内存分析
native 内存泄漏
perf flamegraph
/proc/<pid>/environ进程环境变量。
cat /proc/1234/environ输出:JAVA_HOME=/usr/lib/jvmPATH=/usr/bin
Linux 内核参数通过:
/proc/sys控制。例如:
/proc/sys/net/proc/sys/vm/proc/sys/fs
/proc/sys/net/ipv4/tcp_tw_reuse查看:cat /proc/sys/net/ipv4/tcp_tw_reuse修改:echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse/proc/sys/vm/swappiness查看:cat /proc/sys/vm/swappiness设置:echo 10 > /proc/sys/vm/swappinessls /proc/<pid>/fdcat /proc/<pid>/status | grep VmRSScat /proc/net/tcpcat /proc/statcat /proc/meminfoLinux 内核设计有一个非常优雅的理念:
把内核状态暴露成文件接口。
好处:
1️⃣ 用户空间无需系统调用2️⃣ 任何语言都能读取3️⃣ Shell 直接处理4️⃣ 工具实现极其简单
例如:
试试这个:
watch -n 1 cat /proc/loadavg然后疯狂运行 CPU:yes > /dev/null你会看到 系统负载实时变化。/proc 是 Linux 可观测性的基石。
开发者必须熟悉以下核心文件:
掌握 /proc,等于掌握 Linux 80% 的系统观测能力。