人人都会AI编程

10.4 系统资源查看

更新时间:2026-07-12

系统资源查看是 Linux 运维中最频繁的操作之一。无论是排查性能瓶颈、规划容量还是在故障出现时快速定位问题,你都需要清楚地知道 CPU 在忙什么、内存被谁占用、磁盘 I/O 是否饱和、网络带宽是否耗尽。本节介绍最常用、最实用的资源查看命令及其典型用法。

10.4.1 整体负载概览:uptime 和 top/htop

1. uptime——快速了解系统负载

uptime
# 输出示例:14:32:10 up 45 days, 3:12, 2 users, load average: 0.15, 0.20, 0.18
  • load average 后面的三个数值分别代表过去 1 分钟、5 分钟、15 分钟的平均负载。这个数字大致反映等待 CPU 或磁盘 I/O 的进程数量。对多核 CPU 来说,负载值低于核心数是健康的;持续高于核心数则意味着系统过载。

2. top/htop——实时进程与资源总览
top 是内置的实时监控工具,显示每个进程的 CPU、内存占用率及系统整体信息:

top

在 top 界面中,按下 1 可展开查看每个 CPU 核心的使用情况;按 shift+m 可按内存使用排序;按 q 退出。

htop 是 top 的增强版,界面更直观,支持鼠标操作和垂直水平滚动,安装后直接运行:

htop

htop 可以更方便地筛选进程、树状显示父子进程关系,适合日常交互使用。

10.4.2 CPU 与进程信息

1. mpstat——每个 CPU 核心的详细利用率

mpstat -P ALL 1

该命令每秒刷新一次,分别展示每个核心的 %usr、%sys、%iowait、%idle 等信息。当你想知道某核心是否被单个进程打满时非常有用。

2. 查看 CPU 型号与拓扑

lscpu                     # 简要架构信息
cat /proc/cpuinfo         # 每个逻辑核心的详细标志

3. ps——进程快照

ps aux --sort=-%cpu | head    # 当前 CPU 占用最高的进程
ps aux --sort=-%mem | head    # 内存占用最高的进程

ps 是静态快照,常用于脚本或一次性查询。日常交互中也可以使用 pidstat(需安装 sysstat 包)来实时查看进程级别的 CPU、内存、I/O 消耗。

10.4.3 内存使用情况

1. free——整体内存与交换区

free -h
# 输出示例:
#               total        used        free      shared  buff/cache   available
# Mem:           15Gi       3.2Gi       8.1Gi       235Mi       4.2Gi        11Gi
# Swap:         2.0Gi       0.0Gi       2.0Gi

关注 available 列,它反映了新进程实际可用的内存(包含了可回收的缓存)。不要一见 free 很低就认为内存不足,Linux 倾向于用空闲内存作为文件缓存来加速 I/O。

2. /proc/meminfo——更详尽的内存分解

cat /proc/meminfo | grep -E "MemTotal|MemFree|Buffers|Cached|SwapTotal|SwapFree"

脚本化监控时常读取这个伪文件,因为它提供了结构化的数字。

3. vmstat——内存、进程、I/O、CPU 的综合统计

vmstat 1 5

每 1 秒输出一次,共 5 次。重点关注:

  • siso:交换分区换入/换出的内存量,如果持续不为零,说明物理内存不足。
  • bibo:块设备读写速率,能看出磁盘 I/O 压力。
  • ussyidwa:CPU 在用户态、内核态、空闲和等待 I/O 的时间占比。

10.4.4 磁盘使用与 I/O

1. df——文件系统空间占用

df -h          # 人类可读的格式显示挂载点空间
df -i          # 查看 inode 使用率(小文件过多可能耗尽 inode)

2. du——目录或文件的大小统计

du -sh /var/log/           # 查看目录总大小
du -h --max-depth=1 /home  # 逐层展示一级子目录

当磁盘快满时,du 配合 sort -h 可以快速定位哪个目录占用最多空间:

du -h --max-depth=1 / | sort -h | tail -10

3. iostat——磁盘 I/O 性能

iostat -x 1

每 1 秒输出一次扩展统计。关注列:

  • %util:设备繁忙程度,接近 100% 表示 I/O 瓶颈。
  • await:每个 I/O 请求的平均等待时间,如果持续过高,磁盘响应慢。
  • r/sw/s:每秒读/写请求数。

4. iotop/pidstat——进程级 I/O 监控

iotop            # 类似 top,但显示进程的磁盘读写速率(需 root)
pidstat -d 1     # 按进程看 I/O 统计

iostat 显示磁盘繁忙但你不知道具体是哪个进程导致时,这些工具就能派上用场。

10.4.5 网络状态

1. ss/netstat——套接字查看
现代系统中推荐使用 ss 替代旧式 netstat

ss -tuln   # 查看所有监听中的 TCP/UDP 端口
ss -s      # 套接字统计摘要

2. 实时网络流量
常见的轻量级方法:

sar -n DEV 1          # 显示每秒网卡流量(需 sysstat)

或者直接读取 /proc/net/dev 文件来计算速率。另外 iftop 工具(需安装)可以显示主机间的实时流量。

3. ip 与 ethtool——链路状态与速率

ip -s link show eth0      # 显示 eth0 的统计信息(收发包数、错误等)
ethtool eth0              # 查看协商速率、双工模式等物理层信息

排错时,网卡速率协商错误或大量丢包错误都可以在此发现。

10.4.6 综合性监控工具:sar

sar 是 sysstat 包中的“瑞士军刀”,可以收集和报告 CPU、内存、I/O、网络等多种历史数据:

sar -u 1 3       # CPU 使用率,每秒一次共三次
sar -r           # 当天内存使用历史记录
sar -b           # I/O 统计
sar -n SOCK      # 网络套接字使用统计

sa1sa2 服务通常会在后台定期收集数据(存储于 /var/log/sa/),因此即使问题已经过去,你也可以用 sar 查看几小时或几天前的资源状况,这对事后分析极为重要。


实用建议:资源查看并不需要你记住所有参数,关键是在需要时知道使用哪类工具。建议遵循这样一个排查顺序:先用 tophtop 获得全局印象,然后用 freedfiostatss 等按子系统深入,最后用 sar 回溯历史。这样你就能几乎在任何场景下快速摸清系统资源的使用状况。