0%

系统资源命令

Linux 系统资源监控命令大全:从负载分析到性能调优

在 Linux 系统管理中,实时掌握系统资源(CPU、内存、磁盘、网络)的使用状态是排查性能问题、优化系统的基础。本文将系统介绍常用的系统资源监控命令,涵盖负载查看、CPU / 内存 / 磁盘 / 网络分析等核心场景,帮助你全面了解系统运行状态。

系统整体负载监控

w:查看当前系统负载概览

w 命令可以快速了解系统的整体负载、登录用户及进程活动,是系统监控的 “第一站”。

1
w

系统当前负载

输出解析

  • 第一行:系统当前时间、运行时长、登录用户数、1/5/15 分钟平均负载(核心指标)。
    • 平均负载:单位时间内等待 CPU 处理的任务数,理想值 ≤ CPU 核心数(如 4 核 CPU 负载≤4 属正常)。
  • 第二行及以后:当前登录用户的信息(用户名、登录终端、登录时间、执行的命令等)。

uptime:精简版系统运行状态

uptime 仅输出 w 命令的第一行信息,适合快速查看系统运行时间和平均负载。

1
2
uptime
# 示例输出:16:49:00 up 13 days, 23:15, 2 users, load average: 0.01, 0.04, 0.04
  • 用途:快速判断系统是否处于高负载状态(对比 1/5/15 分钟负载趋势,判断负载是上升还是下降)。

系统资源细化分析工具

vmstat:全面监控进程、内存、IO 和 CPU

vmstat(Virtual Memory Statistics)是分析系统瓶颈的核心工具,可实时输出进程、内存、交换分区、IO 和 CPU 的详细数据。

1
2
# 每1秒刷新一次,共刷新3次
vmstat 1 3

vmstat命令结果

输出解析(按列分组):

(1)procs:进程状态
  • r:等待 CPU 时间片的进程数(长期大于 CPU 核心数 → CPU 不足)。
  • b:等待资源的进程数(如 IO、内存,长期大于 1 → 需关注资源瓶颈)。
(2)memory:内存状态
  • swpd:交换分区使用量(非 0 但 si/so 为 0 时无需担心)。
  • free:空闲内存量。
  • buff:用于块设备的缓冲内存(即将写入磁盘的数据)。
  • cache:文件系统缓存(从磁盘读取的数据,缓存大且 IO 低 → 效率好)。
(3)swap:交换分区活动
  • si:每秒从交换分区读入内存的数据量(长期非 0 → 内存不足)。
  • so:每秒从内存写入交换分区的数据量(长期非 0 → 内存严重不足)。
(4)io:磁盘 IO 活动
  • bi:每秒从磁盘读取的数据量(KB)。
  • bo:每秒写入磁盘的数据量(KB)。
  • 判断bi+bo > 1000wa(CPU 等待 IO 时间)高 → 磁盘 IO 瓶颈。
(5)system:系统活动
  • in:每秒中断次数(过高 → 硬件 / 驱动问题)。
  • cs:每秒上下文切换次数(过高 → CPU 调度频繁,可能是多线程竞争激烈)。
(6)cpu:CPU 使用率
  • us:用户进程占用 CPU 百分比(长期 > 50% → 需优化应用)。
  • sy:内核进程占用 CPU 百分比(us+sy>80% → CPU 资源紧张)。
  • id:空闲 CPU 百分比。
  • wa:等待 IO 的 CPU 时间百分比(>20% → IO 等待严重)。
  • st:被虚拟机盗用的 CPU 时间(仅在虚拟机中有效)。

iostat:磁盘 IO 与 CPU 负载分析

iostat 专注于磁盘 IO 性能和 CPU 使用率统计,适合定位磁盘瓶颈。

1
2
3
4
5
# 每1秒刷新一次,共3次(默认显示CPU和磁盘汇总)
iostat 1 3

# 查看指定磁盘的详细IO性能(-d:仅磁盘;-x:详细信息)
iostat -d -x -k 1 5 /dev/sda

iostat命令结果

iostat查看硬盘IO性能

关键指标

  • CPU 部分(同 vmstatcpu 列,新增 %nice 表示低优先级进程占用)。
  • 磁盘部分:
    • tps:每秒 IO 请求数。
    • kB_read/s/kB_wrtn/s:每秒读写数据量。
    • %util:磁盘使用率(≥100% → 磁盘满负荷,存在瓶颈)。
    • await:IO 请求平均响应时间(>5ms → 磁盘 IO 压力大)。

free:内存使用详情

free 命令用于查看内存和交换分区的使用情况,包括总容量、已用、空闲及缓存。

1
2
# 人性化显示(单位为K/M/G)
free -h

free命令结果

输出解析

  • 内存行:
    • total:总内存;used:已用内存(含缓存);free:完全空闲内存。
    • buff/cache:缓冲(buff)和缓存(cache)的总和(可被系统自动释放)。
    • available:实际可用内存(最关键指标,含可释放的缓存)。
  • 交换分区行Swap 的总容量、已用和空闲(used 过高 → 物理内存不足)。

实用技巧

  • 清理缓存(需 root 权限):

    1
    2
    3
    4
    5
    6
    7
    8
    # 仅清除页面缓存
    echo 1 > /proc/sys/vm/drop_caches

    # 清除目录项和inode
    echo 2 > /proc/sys/vm/drop_caches

    # 清除所有缓存
    echo 3 > /proc/sys/vm/drop_caches

网络 IO 监控工具

(1)ifstat:简洁的网络流量统计

ifstat 显示各网卡的实时收发流量(需安装,如 yum install ifstat)。

1
2
3
4
5
ifstat
# 输出示例:
# eth0 lo
# KB/s in KB/s out KB/s in KB/s out
# 6.95 7.87 0.00 0.00
(2)iftop:实时网络带宽监控

iftop 以拓扑图形式显示各连接的带宽占用,适合定位高流量连接(需安装)。

1
2
# 监控eth1网卡,显示IP和端口(-i:网卡;-n:不解析域名;-P:显示端口)
iftop -ieth1 -nP

交互操作(在 iftop 界面中):

  • 1/2/3:按不同列排序;
  • n:切换显示 IP / 域名;
  • p:显示端口;
  • q:退出。

进程级资源监控:pidstat

pidstatsysstat 工具集中的一员,可针对单个进程或线程监控 CPU、内存、IO 和上下文切换,适合定位异常进程。

1
2
3
4
5
6
7
8
# 监控进程PID=1234的CPU使用(-u:CPU;1 3:每1秒1次,共3次)
pidstat -p 1234 -u 1 3

# 监控进程的IO情况(-d:IO)
pidstat -p 1234 -d 1 3

# 监控线程级CPU使用(-t:线程)
pidstat -p 1234 -t -u 1 3

关键指标

  • %cpu:进程占用 CPU 百分比;
  • kB_rd/s/kB_wr/s:进程每秒读写磁盘的数据量;
  • cswch/s/nvcswch/s:进程每秒自愿 / 非自愿上下文切换次数(过高可能存在线程竞争)。

系统活动报告:sar

sar(System Activity Reporter)是一款强大的性能监控工具,可收集并展示 CPU、内存、磁盘、网络等历史和实时数据,支持将数据保存到文件供后续分析。

常用场景:

(1)查看 CPU 使用率
1
2
# 每10秒1次,共3次
sar -u 10 3
(2)查看网络流量
1
2
# 查看各网卡的收发数据包和流量(-n DEV:网络接口)
sar -n DEV 1 1
  • rxpck/s/txpck/s:每秒收发数据包数;
  • rxkB/s/txkB/s:每秒收发数据量(>5000 kB/s → 流量较高)。
(3)查看内存使用
1
sar -r 3 5  # 每3秒1次,共5次
(4)查看磁盘 IO
1
sar -d 3 5  # 每3秒1次,共5次
(5)查看历史数据

sar 的数据默认保存在 /var/log/sa/ 目录(如 sa21 表示 21 日的数据):

1
2
# 查看21日的网络数据
sar -n DEV -f /var/log/sa/sa21

硬件信息查询

CPU 信息:/proc/cpuinfo

1
2
3
4
5
6
7
8
9
10
11
# 查看物理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

内存信息:/proc/meminfo

1
2
# 查看内存总容量、空闲、缓存等详细信息
cat /proc/meminfo

已加载内核模块:lsmod

lsmod 显示当前载入系统的内核模块(如驱动、文件系统模块),信息来自 /proc/modules

1
2
lsmod
# 输出:模块名 大小 依赖模块数 依赖模块

欢迎关注我的其它发布渠道