Skip to content

系统监控命令

系统监控命令用于查看和分析系统的性能、资源使用情况和运行状态,是系统调优和故障排查的重要工具。

free - 显示内存使用情况

命令简介

free 命令用于显示系统的内存使用情况,包括物理内存(RAM)、交换空间(swap)和内核缓冲区(buffers/cache)的使用情况。该命令对于系统监控和性能调优非常有用。

语法格式

bash
free [选项]

选项

选项描述示例
-b以字节(Bytes)为单位显示free -b
-k以KB为单位显示(默认)free -k
-m以MB为单位显示free -m
-g以GB为单位显示free -g
-h人类可读格式(自动转换单位)free -h
-s N每N秒刷新一次free -s 2
-c N刷新N次后退出free -c 5 -s 1
-t显示总计行(RAM + swap)free -t
--help显示帮助信息free --help

经典案例

bash
# 以人类可读格式显示内存使用情况(推荐)
free -h

# 每2秒刷新一次内存信息(类似动态监控)
free -s 2

# 以MB为单位显示,并显示总计行
free -m -t

# 监控内存变化(刷新5次,每次间隔1秒)
free -c 5 -s 1 -h

输出解析

典型 free -h 输出示例:

              total        used        free      shared  buff/cache   available
Mem:           15Gi       4.2Gi       2.1Gi       1.2Gi       8.7Gi       9.5Gi
Swap:         2.0Gi       0.0Gi       2.0Gi
  • total: 总内存
  • used: 已使用内存(包括buffers/cache)
  • free: 完全空闲的内存
  • shared: 共享内存(通常由多个进程使用)
  • buff/cache: 内核缓冲区和缓存(可被快速回收)
  • available: 估算的可用内存(包括可回收的cache)

注意事项

  1. freeavailable 的区别

    • free 是完全未被使用的内存
    • available 是系统估算的"实际可用"内存(包括可回收的buffers/cache)
  2. 交换空间(swap)使用

    • 如果 swap 使用率持续很高,可能表示物理内存不足
  3. buff/cache 的作用

    • Linux会利用空闲内存缓存磁盘数据,这部分内存会在需要时自动释放,不要误判为内存泄漏
  4. 监控建议

    • 长期监控建议使用 vmstatsar
    • 调试内存问题时建议结合 top/htop 查看具体进程
  5. 单位选择

    • 在脚本中建议使用 -k(KB)或 -b(Bytes)避免单位混淆
    • 交互式查看推荐 -h(人类可读格式)

vmstat - 虚拟内存统计监控工具

简介

vmstat(Virtual Memory Statistics)是Linux系统中用于监控系统虚拟内存、进程、CPU活动等性能数据的命令行工具。它能实时显示系统的内存使用情况、进程状态、CPU利用率、磁盘IO等关键指标,是系统性能分析和故障排查的重要工具。

语法格式

bash
vmstat [选项] [时间间隔] [次数]

选项

选项描述示例
-a显示活跃和非活跃内存vmstat -a
-f显示系统启动后的fork次数vmstat -f
-m显示slabinfo信息vmstat -m
-n不自动更新标题行vmstat -n 1 5
-s显示内存统计事件计数器vmstat -s
-d显示磁盘统计信息vmstat -d
-p 分区显示指定分区统计信息vmstat -p /dev/sda1
-S 单位指定内存显示单位(k/K/m/M)vmstat -S M
-t在输出中增加时间戳vmstat -t 1
-w宽输出模式vmstat -w

输出字段解析

bash
# 示例输出(vmstat 1 3)
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 279868 210332 1390760    0    0     2     1   42   56  1  1 98  0  0
 0  0      0 279868 210332 1390760    0    0     0     0   44   60  0  1 99  0  0
 2  0      0 279868 210332 1390760    0    0     0     0   42   55  1  1 98  0  0

Procs(进程)

字段描述
1r运行队列中的进程数(正在运行或等待CPU的进程)
2b处于不可中断睡眠状态的进程数(通常是等待I/O)

Memory(内存)

字段描述
3swpd使用的虚拟内存大小(KB)
4free空闲的物理内存大小(KB)
5buff用作缓冲区的内存大小(KB)
6cache用作缓存的内存大小(KB)

Swap(交换区)

字段描述
7si每秒从磁盘读入的内存大小(KB/s,swap in)
8so每秒写入磁盘的内存大小(KB/s,swap out)

IO(磁盘)

字段描述
9bi每秒从块设备接收的块数(blocks/s)
10bo每秒发送到块设备的块数(blocks/s)

System(系统)

字段描述
11in每秒中断次数(包括时钟中断)
12cs每秒上下文切换次数

CPU(处理器)

字段描述
13us用户进程占用CPU时间百分比
14sy系统进程占用CPU时间百分比
15id空闲CPU时间百分比
16wa等待I/O的CPU时间百分比
17st被虚拟机偷取的时间百分比(虚拟化环境)

经典案例

bash
# 每2秒刷新一次,共刷新5次
vmstat 2 5

# 监控系统内存和CPU使用情况(MB单位显示)
vmstat -S M 1

# 显示磁盘IO统计信息
vmstat -d

# 结合watch命令持续监控
watch -n 1 vmstat

注意事项

  1. 不带参数运行时,vmstat显示自系统启动以来的平均统计
  2. 第一个时间间隔的数值是自系统启动以来的平均值
  3. 在高负载系统中,vmstat本身可能会影响性能数据
  4. 分析结果时要重点关注:
    • r(运行队列)持续大于CPU核心数
    • b(阻塞进程数)持续不为0
    • si/so(内存交换)持续不为0
  5. 建议在性能分析时结合其他工具如top、iostat等一起使用

iostat - 系统I/O统计监控工具

命令简介

iostat是Linux系统性能监控工具集sysstat的一部分,用于监控系统CPU使用率和设备(磁盘)、分区、网络文件系统的I/O统计信息。特别适用于发现磁盘I/O瓶颈和性能问题。

语法格式

bash
iostat [选项] [间隔时间] [次数]

选项

选项描述示例
-c只显示CPU使用情况iostat -c
-d只显示设备I/O统计iostat -d
-x显示扩展I/O统计信息iostat -x
-k以KB为单位显示iostat -k
-m以MB为单位显示iostat -m
-p显示块设备及分区统计iostat -p sda
-t显示时间戳iostat -t
-y跳过首次统计(显示变化率)iostat -y
-N显示设备映射名称iostat -N
-h人类可读格式iostat -h

输出字段说明

CPU统计:

  • %user:用户级别CPU使用率
  • %nice:nice优先级进程CPU使用率
  • %system:系统级别CPU使用率
  • %iowait:CPU等待I/O时间百分比
  • %steal:虚拟环境被偷取CPU时间
  • %idle:CPU空闲时间

设备I/O统计:

  • r/s:每秒读请求数
  • w/s:每秒写请求数
  • rkB/s:每秒读取数据量(KB)
  • wkB/s:每秒写入数据量(KB)
  • rrqm/s:每秒合并读请求数
  • wrqm/s:每秒合并写请求数
  • %util:设备带宽利用率(关键指标)

经典案例

bash
# 基本使用(显示一次所有信息)
iostat

# 每2秒刷新一次,共显示5次
iostat 2 5

# 只显示磁盘统计(扩展信息)
iostat -dx 1 3

# 监控特定磁盘(sda)的详细I/O
iostat -xmp sda 2

# 结合时间戳监控CPU和磁盘
iostat -t -c -d 1

# 检查LVM逻辑卷性能
iostat -Nx 1

注意事项

  1. 首次统计显示的是系统启动以来的平均值,后续显示的是间隔时间内的变化率
  2. %util接近100%表示设备饱和,但SSD/NVMe设备可能因并行处理能力高而不同
  3. await(平均I/O等待时间)可能指示磁盘瓶颈
  4. 需要安装sysstat包(yum install sysstatapt install sysstat
  5. 在生产环境中建议使用-x选项获取更详细的性能指标
  6. 对于NVMe设备,建议使用iostat -xmdz 1显示更完整的统计信息

uptime - 显示系统运行时间及负载

命令简介

uptime命令用于显示系统已经运行了多长时间、当前有多少用户登录以及系统在过去的1分钟、5分钟和15分钟内的平均负载。这是一个快速了解系统运行状态的基础命令。

语法格式

bash
uptime [选项]

选项

选项描述示例
-p以简洁格式显示运行时间uptime -p
-s显示系统启动时间uptime -s
-h显示帮助信息uptime -h
-V显示版本信息uptime -V

经典案例

bash
# 标准输出格式(包含时间/用户数/负载)
uptime
# 输出示例: 15:32:40 up 3 days,  2:17,  2 users,  load average: 0.15, 0.21, 0.30

# 简洁模式显示运行时间
uptime -p
# 输出示例:up 3 days, 2 hours

# 查看系统启动时间
uptime -s
# 输出示例:2024-03-01 13:15:22

注意事项

  1. 负载平均值显示在最后三个字段中,分别代表1分钟、5分钟和15分钟内的系统负载。这些数值是运行队列中进程数的平均值(包括正在运行的进程和等待CPU的进程)。
  2. 在多核CPU系统中,负载值除以CPU核心数可以判断系统是否过载。例如4核CPU的负载值为4.00表示完全利用。
  3. 该命令信息来自/proc/uptime/proc/loadavg文件,普通用户也可执行。
  4. 在嵌入式系统或特殊环境中,可能不支持-p-s等选项。

tcpdump - 网络数据包抓取分析工具

命令简介

tcpdump是Linux系统中最强大的网络抓包分析工具,能够捕获流经指定网络接口的数据包,支持多种过滤条件,可实时显示或保存为pcap文件供后续分析。广泛用于网络故障排查、安全审计和协议分析。

语法格式

bash
tcpdump [选项] [过滤表达式]

选项

选项描述示例
-i interface指定监听的网络接口tcpdump -i eth0
-n禁用主机名解析(显示IP)tcpdump -n
-nn禁用端口和服务名解析tcpdump -nn
-c count捕获指定数量的包后退出tcpdump -c 10
-w file.pcap保存为pcap格式文件tcpdump -w traffic.pcap
-r file.pcap读取pcap文件分析tcpdump -r traffic.pcap
-X同时以HEX和ASCII显示数据tcpdump -X
-A以ASCII格式显示数据tcpdump -A
-v显示详细信息tcpdump -v
-vv显示更详细信息tcpdump -vv
-s snaplen设置抓包长度(默认96字节)tcpdump -s 1500
-q快速输出(简略显示)tcpdump -q
-e显示链路层头部信息tcpdump -e

过滤表达式

表达式描述示例
host ip过滤特定IPtcpdump host 192.168.1.1
net subnet过滤子网tcpdump net 192.168.1.0/24
port num过滤端口tcpdump port 80
src/dst源/目标过滤tcpdump src 192.168.1.100
tcp/udp/icmp协议过滤tcpdump tcp
and/or/not逻辑组合tcpdump port 80 and host 1.1.1.1

经典案例

bash
# 捕获eth0接口的所有HTTP流量(显示ASCII内容)
tcpdump -i eth0 -A port 80

# 捕获与特定IP的SSH通信(限制20个包)
tcpdump -i eth0 -c 20 host 10.0.0.5 and port 22

# 捕获DNS查询(UDP协议+端口53)
tcpdump -i eth0 -n udp port 53

# 捕获TCP SYN包(三次握手第一个包)
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn) != 0'

# 保存流量到文件(后台运行)
tcpdump -i eth0 -w /tmp/traffic.pcap &

注意事项

  1. 需要root权限或CAP_NET_ADMIN能力才能捕获数据包
  2. 生产环境慎用-s 0(捕获完整数据包),可能消耗大量资源
  3. 使用-w保存文件时,建议配合-C选项限制单个文件大小
  4. 复杂过滤表达式建议用单引号包裹,避免shell解析特殊符号
  5. 默认只捕获前96字节,分析完整数据需指定-s 0或适当长度

top - 实时进程监控工具

top 是 Linux 系统中最常用的实时进程监控工具,可以动态查看系统资源使用情况、进程状态和系统负载。

语法格式

bash
top [选项]
  • 默认显示 CPU、内存、进程等信息
  • q 退出
选项说明
top -d <秒>设置刷新间隔(默认 3 秒)
top -p <PID>仅监控指定进程
top -u <用户名>仅显示指定用户的进程
top -H显示线程(而不是进程)
top -b批处理模式(适合输出到文件)
top -n <次数>运行指定次数后退出

top 交互命令

top 运行时,可以输入以下命令进行交互:

全局控制

命令说明
q退出 top
h显示帮助
Space立即刷新
z切换彩色/黑白显示
W保存当前配置到 ~/.toprc

排序控制

命令说明
P (大写)CPU 使用率 排序
M (大写)内存使用率 排序
T (大写)运行时间 排序
N (大写)PID 排序
R (大写)反向排序

进程操作

命令说明
k杀死进程(输入 PID 后回车)
r调整进程的 nice 值(优先级)
c显示完整命令行
H (大写)显示/隐藏线程

top 界面解析

top 界面分为 顶部汇总信息进程列表 两部分:

顶部汇总信息

bash
top - 10:30:45 up 2 days,  3:45,  2 users,  load average: 0.15, 0.10, 0.05
Tasks: 120 total,   2 running, 118 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.3 us,  1.2 sy,  0.0 ni, 93.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7856.4 total,   1024.2 free,   4096.0 used,   2736.2 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   3200.0 avail Mem
  • 第1行:系统运行时间、用户数、平均负载(1/5/15 分钟)
  • 第2行:进程状态(运行、睡眠、停止、僵尸)
  • 第3行:CPU 使用情况(用户态、内核态、空闲、IO等待等)
  • 第4行:物理内存使用情况(总量、空闲、已用、缓存)
  • 第5行:交换分区(Swap)使用情况

进程列表

bash
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1234 root      20   0  500000  80000  10000 R  10.5  1.0   5:30.01 firefox
 5678 mysql     20   0 2000000 500000  20000 S   5.2  6.3  10:20.45 mysqld
  • PID:进程 ID
  • USER:进程所属用户
  • PR:优先级
  • NInice 值(-20 最高,19 最低)
  • VIRT:虚拟内存使用量(KB)
  • RES:物理内存使用量(KB)
  • SHR:共享内存(KB)
  • S:进程状态(R=运行, S=睡眠, Z=僵尸, D=不可中断)
  • %CPU:CPU 占用率
  • %MEM:内存占用率
  • TIME+:累计 CPU 时间
  • COMMAND:进程名(c 键可切换完整命令)

经典案例

bash
top -p 1234,5678  			# 监控 PID 1234 和 5678
top -b -n 3 > top.log  		# 运行 3 次并保存到文件
top -H -p 1234  			# 查看 PID 1234 的所有线程
top -o %MEM  				# 按内存占用排序
top -d 1  					# 每秒刷新一次