- 工信部备案号 滇ICP备05000110号-1
- 滇公网安备53011102001527号
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
- CN域名投诉举报处理平台:电话:010-58813000、邮箱:service@cnnic.cn
欢迎来到8455线路检测中心技术小课堂,每天分享一个技术小知识。
在Linux系统管理和云计算运维中,性能诊断是核心技能。除了常见的top、vmstat、iostat等工具,/proc虚拟文件系统提供了一个直接与内核交互的窗口,能够获取最底层、最详尽的系统和进程信息。掌握/proc的使用,是进行深度性能分析和疑难问题排查的关键。本文将带你深入探索/proc的几个关键部分,并演示如何利用它进行实时诊断。
/proc是一个伪文件系统,它动态地提供了系统内核和运行进程的实时信息。这些“文件”实际上并不占用磁盘空间,而是在读取时由内核动态生成。其内容主要分为两类:
· 数字命名的目录:每个目录对应一个进程ID(PID),包含该进程的详细信息。
· 非数字命名的文件:提供系统级别的信息,如CPU、内存、网络、设备等。
我们重点探讨几个用于系统级性能分析的关键文件。
/proc/stat提供了自系统启动以来,CPU在各种模式下花费的时间累计值(单位:USER_HZ,通常为1/100秒)。这是计算CPU利用率的基础。
查看命令与输出解读:
cat /proc/stat
输出示例:
cpu 1000 200 300 4000 50 60 70 80 0 0
cpu0 500 100 150 2000 25 30 35 40 0 0
cpu1 500 100 150 2000 25 30 35 40 0 0
intr 100000 ...
...
第一行 cpu是系统所有CPU核心的累计值,后续 cpu0、cpu1等是每个逻辑核心的独立数据。
各列含义(以第一行 cpu为例):
1. user:用户态运行时间。
2. nice:低优先级(nice值>0)用户态运行时间。
3. system:内核态运行时间。
4. idle:空闲时间。
5. iowait:等待I/O完成的时间(不可中断睡眠)。此项过高通常表示存在I/O瓶颈。
6. irq:处理硬件中断的时间。
7. softirq:处理软中断的时间。
8. steal:在虚拟化环境中,被Hypervisor“偷走”的时间(通常是因为宿主机CPU过载)。
9. guest:运行虚拟CPU的时间。
10. guest_nice:运行低优先级虚拟CPU的时间。
实战:计算特定时间间隔内的CPU利用率
你可以编写一个简单的Shell脚本来计算:
#!/bin/bash
# 第一次采样
read cpu user nice system idle iowait irq softirq steal guest guest_nice <<< $(cat /proc/stat | grep '^cpu ')
total1=$((user+nice+system+idle+iowait+irq+softirq+steal+guest+guest_nice))
idle1=$idle
sleep 1 # 采样间隔
# 第二次采样
read cpu user nice system idle iowait irq softirq steal guest guest_nice <<< $(cat /proc/stat | grep '^cpu ')
total2=$((user+nice+system+idle+iowait+irq+softirq+steal+guest+guest_nice))
idle2=$idle
# 计算利用率
total=$((total2 - total1))
idle=$((idle2 - idle1))
used=$((total - idle))
echo "CPU总时间片差:$total"
echo "CPU空闲时间差:$idle"
echo "CPU使用率:$((used * 100 / total))%"
/proc/meminfo提供了比free -m更详细的内存使用情况。
关键字段解析:
· MemTotal:总物理内存。
· MemFree:完全空闲的内存。这个值通常很小,因为Linux会利用空闲内存做缓存。
· MemAvailable(重要):估算的可用内存。这是系统在不进行交换的情况下,可分配给新应用的内存。是判断内存压力的更佳指标。
· Buffers:用于块设备(如磁盘)的临时缓冲区。
· Cached:页面缓存(Page Cache)。这是Linux将频繁访问的文件数据缓存在内存中的部分。当应用需要更多内存时,这部分可以被快速回收。所以Cached高通常不是坏事,而是性能优化的表现。
· SwapCached:曾被换出,又被换入,但仍留在交换区(swap)的数据。表明系统曾经历内存压力。
· Active(file)/ Inactive(file):活跃/非活跃的页面缓存。
· SwapTotal/ SwapFree:交换空间总量与剩余量。
判断内存压力:
一个健康的系统,MemAvailable应该保持在一个合理水平。如果MemAvailable持续很低,且SwapFree在减少,说明系统内存不足。
每个运行中的进程都有一个/proc/[PID]/目录。
常用文件:
· /proc/[PID]/status:进程状态摘要,包含UID、GID、内存使用等。
· /proc/[PID]/io:进程的I/O统计(需要内核支持)。
· /proc/[PID]/fd/:该进程打开的所有文件描述符列表。
实战:诊断特定进程(如PID 1234)的内存使用
# 查看进程的内存摘要
cat /proc/1234/status | grep -E 'VmRSS|VmSize|Threads'
# VmSize: 虚拟内存大小 (整个进程地址空间)
# VmRSS: 常驻内存大小 (实际使用的物理内存,Resident Set Size)
# Threads: 线程数
# 查看进程打开的文件描述符数量(可能涉及文件泄露)
ls -l /proc/1234/fd | wc -l
/proc/loadavg的前三个数字分别代表过去1、5、15分钟的系统平均负载(即运行队列的平均长度,包括正在运行和等待I/O的进程)。
cat /proc/loadavg
# 输出: 0.50 0.75 0.80 2/500 12345
# 解释:过去1分钟平均负载0.50,过去5分钟0.75,过去15分钟0.80。
# “2/500”:当前有2个进程在运行或等待,系统总共有500个进程。
# “12345”:最近创建的进程PID。
进阶解读:对于多核CPU,平均负载应与核心数对比。例如,一个4核CPU,如果15分钟平均负载持续高于4.0,说明系统可能长期过载。
/proc文件系统是Linux内核暴露给用户的诊断接口,是性能分析和故障排查的终极利器。通过直接读取和解析这些文件,你可以:
· 精确计算任意时间段的CPU利用率,细分到iowait、steal等关键状态。
· 深入理解内存使用细节,区分缓存、缓冲和实际应用占用。
· 对特定进程进行资源使用剖析。
8455线路检测中心官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,8455线路检测中心整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
更多技术知识,8455线路检测中心期待与你一起探索。
售前咨询
售后咨询
备案咨询
二维码

TOP