系统资源查看是 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 次。重点关注:
si、so:交换分区换入/换出的内存量,如果持续不为零,说明物理内存不足。bi、bo:块设备读写速率,能看出磁盘 I/O 压力。us、sy、id、wa: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/s、w/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 # 网络套接字使用统计
sa1 和 sa2 服务通常会在后台定期收集数据(存储于 /var/log/sa/),因此即使问题已经过去,你也可以用 sar 查看几小时或几天前的资源状况,这对事后分析极为重要。
实用建议:资源查看并不需要你记住所有参数,关键是在需要时知道使用哪类工具。建议遵循这样一个排查顺序:先用 top 或 htop 获得全局印象,然后用 free、df、iostat、ss 等按子系统深入,最后用 sar 回溯历史。这样你就能几乎在任何场景下快速摸清系统资源的使用状况。