系统监控 #
一、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、内存、磁盘、网络等资源监控。
关键要点:
top/htop用于实时监控进程和资源free/vmstat用于内存监控df/du/iostat用于磁盘监控iftop/nethogs用于网络监控glances/dstat是综合监控工具
下一章预告: 网络高级 - 学习高级网络配置和管理技术。
最后更新:2026-03-27