系统监控 #

一、CPU 监控 #

1.1 top - 实时监控 #

bash
# 启动 top
top

# 指定刷新间隔
top -d 5

# 只显示指定用户
top -u username

# 只显示指定进程
top -p PID

# 批处理模式
top -b -n 1 > top.txt

# 交互命令
P    # 按 CPU 排序
M    # 按内存排序
1    # 显示所有 CPU
c    # 显示完整命令
H    # 显示线程

1.2 htop - 增强版监控 #

bash
# 安装
sudo apt install htop

# 启动
htop

# 指定用户
htop -u username

# 只显示指定进程
htop -p PID

# 交互命令
F5   # 树形显示
F6   # 排序
F7   # 降低优先级
F8   # 提高优先级
F9   # 终止进程
F10  # 退出

1.3 mpstat - CPU 统计 #

bash
# 安装
sudo apt install sysstat

# 显示 CPU 统计
mpstat

# 显示所有 CPU
mpstat -P ALL

# 指定间隔和次数
mpstat 2 5

# 输出说明
# %user     用户空间占用
# %nice     nice 进程占用
# %system   内核空间占用
# %iowait   IO 等待
# %idle     空闲

1.4 uptime - 系统负载 #

bash
# 查看系统负载
uptime

# 输出示例
# 10:00:00 up 10 days,  2:00,  2 users,  load average: 0.00, 0.01, 0.05

# load average 含义
# 1 分钟平均负载
# 5 分钟平均负载
# 15 分钟平均负载

# 负载值含义
# 小于 CPU 核心数:系统负载正常
# 接近 CPU 核心数:系统负载较高
# 大于 CPU 核心数:系统过载

1.5 w - 用户和负载 #

bash
# 查看登录用户和负载
w

# 输出示例
# 10:00:00 up 10 days,  2:00,  2 users,  load average: 0.00, 0.01, 0.05
# USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
# user     pts/0    192.168.1.100    09:00    1:00   0.50s  0.10s -bash

二、内存监控 #

2.1 free - 内存使用 #

bash
# 查看内存使用
free

# 人类可读格式
free -h

# 指定刷新间隔
free -s 2

# 显示总计
free -t

# 输出说明
# total     总内存
# used      已用内存
# free      空闲内存
# shared    共享内存
# buff/cache 缓冲/缓存
# available 可用内存

2.2 vmstat - 虚拟内存统计 #

bash
# 显示虚拟内存统计
vmstat

# 指定间隔和次数
vmstat 2 5

# 显示内存统计
vmstat -s

# 显示磁盘统计
vmstat -d

# 输出说明
# procs
#   r    运行队列中的进程数
#   b    等待 IO 的进程数
# memory
#   swpd 虚拟内存使用量
#   free 空闲内存
#   buff 缓冲内存
#   cache 缓存内存
# swap
#   si   从磁盘交换到内存
#   so   从内存交换到磁盘
# io
#   bi   从块设备读取
#   bo   写入块设备
# system
#   in   中断数
#   cs   上下文切换数
# cpu
#   us   用户空间占用
#   sy   内核空间占用
#   id   空闲
#   wa   IO 等待
#   st   虚拟化占用

2.3 /proc/meminfo - 内存信息 #

bash
# 查看详细内存信息
cat /proc/meminfo

# 常用字段
MemTotal          总内存
MemFree           空闲内存
MemAvailable      可用内存
Buffers           缓冲内存
Cached            缓存内存
SwapCached        交换缓存
SwapTotal         总交换空间
SwapFree          空闲交换空间

三、磁盘监控 #

3.1 df - 磁盘使用 #

bash
# 查看磁盘使用
df

# 人类可读格式
df -h

# 显示 inode 信息
df -i

# 显示文件系统类型
df -T

# 只显示指定类型
df -t ext4

# 排除指定类型
df -x tmpfs

3.2 du - 目录大小 #

bash
# 查看目录大小
du directory

# 人类可读格式
du -h directory

# 只显示总大小
du -sh directory

# 显示子目录
du -h --max-depth=1 directory

# 按大小排序
du -h directory | sort -h

# 显示最大的目录
du -h --max-depth=1 / | sort -hr | head -10

3.3 iostat - IO 统计 #

bash
# 安装
sudo apt install sysstat

# 显示 IO 统计
iostat

# 指定间隔和次数
iostat 2 5

# 只显示 CPU
iostat -c

# 只显示磁盘
iostat -d

# 显示扩展信息
iostat -x

# 输出说明
# tps       每秒传输数
# kB_read/s 每秒读取 KB
# kB_wrtn/s 每秒写入 KB
# kB_read   总读取 KB
# kB_wrtn   总写入 KB

3.4 iotop - IO 监控 #

bash
# 安装
sudo apt install iotop

# 启动
sudo iotop

# 只显示有 IO 的进程
sudo iotop -o

# 只显示进程(不显示线程)
sudo iotop -P

# 批处理模式
sudo iotop -b -n 1 > iotop.txt

3.5 lsof - 打开文件 #

bash
# 查看所有打开的文件
sudo lsof

# 查看指定用户的文件
sudo lsof -u username

# 查看指定进程的文件
sudo lsof -p PID

# 查看指定文件被谁打开
sudo lsof /path/to/file

# 查看端口占用
sudo lsof -i :80

# 查看目录被谁打开
sudo lsof +D /path/to/directory

四、网络监控 #

4.1 iftop - 带宽监控 #

bash
# 安装
sudo apt install iftop

# 启动
sudo iftop

# 指定接口
sudo iftop -i eth0

# 显示端口
sudo iftop -P

# 显示字节
sudo iftop -B

# 按主机名排序
sudo iftop -n

4.2 nethogs - 进程流量 #

bash
# 安装
sudo apt install nethogs

# 启动
sudo nethogs

# 指定接口
sudo nethogs eth0

# 刷新间隔
sudo nethogs -d 2

4.3 nload - 网络流量 #

bash
# 安装
sudo apt install nload

# 启动
nload

# 指定接口
nload eth0

4.4 ss - 套接字统计 #

bash
# 查看所有套接字
ss

# 查看 TCP 连接
ss -t

# 查看 UDP 连接
ss -u

# 查看监听端口
ss -l

# 显示进程信息
ss -p

# 显示统计信息
ss -s

# 组合使用
ss -tlnp

4.5 netstat - 网络统计 #

bash
# 查看所有连接
netstat -a

# 查看 TCP 连接
netstat -t

# 查看 UDP 连接
netstat -u

# 查看监听端口
netstat -l

# 显示进程信息
netstat -p

# 显示统计信息
netstat -s

# 组合使用
netstat -tlnp

五、综合监控工具 #

5.1 glances - 综合监控 #

bash
# 安装
sudo apt install glances

# 启动
glances

# Web 模式
glances -w

# 指定刷新间隔
glances -t 5

# 交互命令
h    # 帮助
a    # 自动排序
c    # 按 CPU 排序
m    # 按内存排序
p    # 按进程名排序
q    # 退出

5.2 dstat - 综合统计 #

bash
# 安装
sudo apt install dstat

# 显示所有统计
dstat

# 指定统计项
dstat -c -m -d -n

# 指定间隔和次数
dstat 2 5

# 常用选项
-c    # CPU 统计
-m    # 内存统计
-d    # 磁盘统计
-n    # 网络统计
-p    # 进程统计
-s    # 交换分区统计
-l    # 负载统计

5.3 sar - 系统活动报告 #

bash
# 安装
sudo apt install sysstat

# 启用数据收集
sudo systemctl enable sysstat
sudo systemctl start sysstat

# CPU 统计
sar -u

# 内存统计
sar -r

# 磁盘统计
sar -d

# 网络统计
sar -n DEV

# 指定时间
sar -s 10:00:00 -e 11:00:00

# 指定间隔和次数
sar 2 5

5.4 nmon - 性能监控 #

bash
# 安装
sudo apt install nmon

# 启动
nmon

# 交互命令
c    # CPU
m    # 内存
d    # 磁盘
n    # 网络
t    # 进程
q    # 退出

# 数据收集模式
nmon -f -s 10 -c 60

六、进程监控 #

6.1 ps - 进程快照 #

bash
# 查看所有进程
ps aux

# 查看进程树
ps -ef --forest

# 按内存排序
ps aux --sort=-%mem | head -10

# 按CPU排序
ps aux --sort=-%cpu | head -10

# 查看线程
ps -eLf

# 自定义输出
ps -eo pid,ppid,user,%cpu,%mem,cmd

6.2 pstree - 进程树 #

bash
# 显示进程树
pstree

# 显示 PID
pstree -p

# 显示命令参数
pstree -a

# 高亮显示
pstree -h

# 指定进程
pstree -p PID

6.3 pgrep - 查找进程 #

bash
# 查找进程 PID
pgrep nginx

# 显示进程名
pgrep -l nginx

# 显示完整命令
pgrep -a nginx

# 按用户查找
pgrep -u root nginx

七、监控脚本 #

7.1 系统监控脚本 #

bash
#!/bin/bash
# 系统监控脚本

echo "=== 系统信息 ==="
echo "主机名: $(hostname)"
echo "内核: $(uname -r)"
echo "系统: $(cat /etc/os-release | grep PRETTY_NAME)"

echo -e "\n=== CPU 信息 ==="
echo "CPU 核心数: $(nproc)"
echo "CPU 型号: $(lscpu | grep 'Model name')"
echo "负载: $(uptime | awk -F'load average:' '{print $2}')"

echo -e "\n=== 内存信息 ==="
free -h

echo -e "\n=== 磁盘信息 ==="
df -h

echo -e "\n=== 网络信息 ==="
ip addr | grep inet

7.2 进程监控脚本 #

bash
#!/bin/bash
# 进程监控脚本

PROCESS=$1

if [ -z "$PROCESS" ]; then
    echo "Usage: $0 process_name"
    exit 1
fi

PID=$(pgrep $PROCESS)

if [ -z "$PID" ]; then
    echo "Process $PROCESS not found"
    exit 1
fi

echo "Process: $PROCESS"
echo "PID: $PID"
echo "CPU: $(ps -p $PID -o %cpu | tail -1)"
echo "Memory: $(ps -p $PID -o %mem | tail -1)"
echo "Threads: $(ps -p $PID -o nlwp | tail -1)"
echo "Status: $(ps -p $PID -o stat | tail -1)"

7.3 告警脚本 #

bash
#!/bin/bash
# 资源告警脚本

CPU_THRESHOLD=80
MEM_THRESHOLD=80
DISK_THRESHOLD=80

# CPU 告警
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print int($2)}')
if [ $CPU_USAGE -gt $CPU_THRESHOLD ]; then
    echo "Warning: CPU usage is ${CPU_USAGE}%"
fi

# 内存告警
MEM_USAGE=$(free | grep Mem | awk '{print int($3/$2 * 100)}')
if [ $MEM_USAGE -gt $MEM_THRESHOLD ]; then
    echo "Warning: Memory usage is ${MEM_USAGE}%"
fi

# 磁盘告警
DISK_USAGE=$(df -h / | tail -1 | awk '{print int($5)}')
if [ $DISK_USAGE -gt $DISK_THRESHOLD ]; then
    echo "Warning: Disk usage is ${DISK_USAGE}%"
fi

八、小结 #

本章学习了 Linux 系统监控的核心命令,包括 CPU、内存、磁盘、网络等资源监控。

关键要点:

  1. top/htop 用于实时监控进程和资源
  2. free/vmstat 用于内存监控
  3. df/du/iostat 用于磁盘监控
  4. iftop/nethogs 用于网络监控
  5. glances/dstat 是综合监控工具

下一章预告: 网络高级 - 学习高级网络配置和管理技术。

最后更新:2026-03-27