Skip to content

系统监控

系统信息

uname - 系统信息

bash
uname                               # 内核名称
uname -a                            # 所有信息
uname -r                            # 内核版本
uname -v                            # 内核编译信息
uname -m                            # 硬件架构
uname -p                            # 处理器类型
uname -i                            # 硬件平台
uname -o                            # 操作系统

hostnamectl - 主机信息

bash
hostnamectl                         # 显示主机信息
hostnamectl status                  # 显示状态
hostnamectl set-hostname newname    # 设置主机名
hostnamectl set-icon-name computer  # 设置图标名
hostnamectl set-chassis desktop     # 设置机箱类型

其他系统信息命令

bash
cat /etc/os-release                 # 操作系统信息
cat /proc/version                   # 内核版本
cat /proc/cpuinfo                   # CPU 信息
cat /proc/meminfo                   # 内存信息
lscpu                               # CPU 架构信息
lsmem                               # 内存信息
lsusb                               # USB 设备
lspci                               # PCI 设备
lsblk                               # 块设备
lshw                                # 硬件信息
dmidecode                           # DMI 信息(需要 root)

CPU 监控

top - 进程监控

bash
top                                 # 动态显示进程
top -d 5                            # 5秒刷新
top -p 1234                         # 监控指定进程
top -u username                     # 指定用户
top -b -n 1                         # 批处理模式

top 输出说明:

%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si
  • us: 用户空间 CPU
  • sy: 内核空间 CPU
  • ni: 低优先级进程 CPU
  • id: 空闲 CPU
  • wa: 等待 I/O
  • hi: 硬件中断
  • si: 软件中断
  • st: 虚拟化偷取时间

htop - 增强版监控

bash
htop                                # 启动 htop
htop -p 1234                        # 监控指定进程
htop -u username                    # 指定用户
htop -t                             # 树形显示
htop -s PERCENT_CPU                 # 按 CPU 排序
htop -s PERCENT_MEM                 # 按内存排序

mpstat - CPU 统计

bash
mpstat                              # CPU 统计
mpstat 1                            # 每秒刷新
mpstat 1 5                          # 刷新5次
mpstat -P ALL                       # 所有 CPU
mpstat -P 0                         # 指定 CPU

lscpu - CPU 信息

bash
lscpu                               # CPU 架构信息
lscpu -e                            # 扩展格式
lscpu -p                            # 解析格式

CPU 信息文件

bash
cat /proc/cpuinfo                   # CPU 详细信息
cat /proc/cpuinfo | grep "model name" | head -1    # CPU 型号
cat /proc/cpuinfo | grep "processor" | wc -l       # CPU 核心数
nproc                               # CPU 核心数
lscpu | grep "^CPU(s)"              # CPU 核心数

内存监控

free - 内存使用

bash
free                                # 显示内存使用
free -h                             # 人类可读格式
free -b                             # 字节
free -k                             # KB
free -m                             # MB
free -g                             # GB
free -t                             # 显示总计
free -s 1                           # 每秒刷新
free -c 5                           # 刷新5次

free 输出说明:

              total        used        free      shared  buff/cache   available
Mem:        8000        2000         500         100        5500        5000
Swap:       2000         100        1900
  • total: 总内存
  • used: 已使用
  • free: 空闲
  • shared: 共享内存
  • buff/cache: 缓冲/缓存
  • available: 可用内存

vmstat - 虚拟内存

bash
vmstat                              # 内存统计
vmstat 1                            # 每秒刷新
vmstat 1 5                          # 刷新5次
vmstat -s                           # 统计信息
vmstat -d                           # 磁盘统计
vmstat -D                           # 磁盘汇总

vmstat 输出说明:

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    100   500M   200M  2000M    0    0     5    10   50  100   1  1 98  0  0
  • r: 运行队列
  • b: 阻塞进程
  • swpd: 虚拟内存
  • si: 从交换分区读入
  • so: 写入交换分区
  • bi: 从块设备读入
  • bo: 写入块设备
  • in: 中断
  • cs: 上下文切换

/proc/meminfo

bash
cat /proc/meminfo                   # 内存详细信息
grep MemTotal /proc/meminfo         # 总内存
grep MemFree /proc/meminfo          # 空闲内存
grep MemAvailable /proc/meminfo     # 可用内存
grep Buffers /proc/meminfo          # 缓冲
grep Cached /proc/meminfo           # 缓存
grep SwapTotal /proc/meminfo        # 总交换
grep SwapFree /proc/meminfo         # 空闲交换

磁盘监控

df - 磁盘空间

bash
df                                  # 显示磁盘使用
df -h                               # 人类可读格式
df -T                               # 显示文件系统类型
df -i                               # 显示 inode 使用
df -x tmpfs                         # 排除文件系统
df --total                          # 显示总计
df /path                            # 指定路径

du - 目录大小

bash
du                                  # 显示目录大小
du -h                               # 人类可读格式
du -sh /path                        # 显示总大小
du -h --max-depth=1                 # 显示一层深度
du -ah                              # 显示所有文件
du -sh *                            # 当前目录各文件大小
du -h --exclude="*.log"             # 排除文件

iostat - I/O 统计

bash
iostat                              # I/O 统计
iostat 1                            # 每秒刷新
iostat 1 5                          # 刷新5次
iostat -x                           # 扩展信息
iostat -c                           # CPU 统计
iostat -d                           # 磁盘统计
iostat -d sda                       # 指定设备
iostat -p sda                       # 分区统计
iostat -k                           # KB/s
iostat -m                           # MB/s

iostat 输出说明:

Device            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              5.00       100.00        50.00     100000      50000
  • tps: 每秒传输次数
  • kB_read/s: 每秒读取 KB
  • kB_wrtn/s: 每秒写入 KB
  • kB_read: 总读取 KB
  • kB_wrtn: 总写入 KB

iotop - I/O 监控

bash
iotop                               # I/O 监控
iotop -o                            # 只显示有 I/O 的进程
iotop -P                            # 只显示进程
iotop -p 1234                       # 指定进程
iotop -u username                   # 指定用户
iotop -b                            # 批处理模式
iotop -n 5                          # 刷新5次
iotop -d 2                          # 2秒刷新

磁盘健康

bash
smartctl -a /dev/sda                # SMART 信息
smartctl -H /dev/sda                # 健康状态
smartctl -t short /dev/sda          # 短自检
smartctl -t long /dev/sda           # 长自检

网络监控

网络接口统计

bash
ifconfig                            # 接口信息
ip -s link                          # 接口统计
ip -s -s link show eth0             # 详细统计
cat /proc/net/dev                   # 设备统计

网络连接

bash
ss -tulpn                           # 监听端口
ss -s                               # 统计信息
ss -t state established             # 已建立的连接
netstat -tulpn                      # 监听端口
netstat -s                          # 协议统计
netstat -i                          # 接口统计

网络流量

bash
iftop                               # 实时流量
iftop -i eth0                       # 指定接口
iftop -n                            # 不解析主机名
iftop -N                            # 不解析端口
iftop -P                            # 显示端口

nload                               # 网络流量
nload eth0                          # 指定接口

nethogs                             # 进程网络流量
nethogs eth0                        # 指定接口

sar -n DEV 1                        # 网络流量统计
sar -n EDEV 1                       # 网络错误统计

带宽测试

bash
iperf -s                            # 服务端
iperf -c 192.168.1.1                # 客户端
iperf -c 192.168.1.1 -t 60          # 测试60秒
iperf -c 192.168.1.1 -P 4           # 4个并行连接
iperf -c 192.168.1.1 -u             # UDP 测试

进程监控

ps - 进程状态

bash
ps aux                              # 所有进程
ps -ef                              # 所有进程
ps -u username                      # 指定用户
ps -p 1234                          # 指定进程
ps -C nginx                         # 指定命令
ps --forest                         # 树形显示
ps -eo pid,ppid,cmd,%mem,%cpu       # 自定义输出
ps aux --sort=-%cpu                 # 按 CPU 排序
ps aux --sort=-%mem                 # 按内存排序

pidstat - 进程统计

bash
pidstat                             # 进程统计
pidstat 1                           # 每秒刷新
pidstat -p 1234                     # 指定进程
pidstat -d                          # 磁盘 I/O
pidstat -r                          # 内存使用
pidstat -u                          # CPU 使用
pidstat -w                          # 上下文切换
pidstat -t                          # 显示线程

strace - 系统调用

bash
strace command                      # 跟踪命令
strace -p 1234                      # 跟踪进程
strace -c command                   # 统计系统调用
strace -e trace=open,read command   # 跟踪指定调用
strace -f command                   # 跟踪子进程
strace -o output.txt command        # 输出到文件
strace -T command                   # 显示调用时间
strace -ff -o trace command         # 分文件输出

lsof - 打开文件

bash
lsof                                # 所有打开文件
lsof -p 1234                        # 指定进程
lsof -u username                    # 指定用户
lsof -i                             # 网络连接
lsof -i :80                         # 指定端口
lsof -i TCP                         # TCP 连接
lsof -i UDP                         # UDP 连接
lsof /path/to/file                  # 打开指定文件
lsof +D /path                       # 目录下打开的文件
lsof -c nginx                       # 指定命令

系统负载

uptime - 系统负载

bash
uptime                              # 系统负载
cat /proc/loadavg                   # 负载信息

输出说明:

12:00:00 up 10 days,  2:00,  2 users,  load average: 0.00, 0.01, 0.05
  • load average: 1/5/15分钟平均负载
  • 负载值接近 CPU 核心数时系统较忙

w - 登录用户

bash
w                                   # 登录用户和负载
w username                          # 指定用户

日志监控

journalctl - systemd 日志

bash
journalctl                          # 所有日志
journalctl -u nginx                 # 服务日志
journalctl -f                       # 实时跟踪
journalctl -n 100                   # 最近100条
journalctl --since today            # 今天的日志
journalctl --since "2023-12-25"     # 指定日期
journalctl --since "1 hour ago"     # 最近1小时
journalctl -p err                   # 错误级别
journalctl -b                       # 本次启动日志
journalctl -k                       # 内核日志
journalctl --disk-usage             # 日志占用
journalctl --vacuum-size=100M       # 限制日志大小

传统日志文件

bash
tail -f /var/log/syslog             # 系统日志
tail -f /var/log/messages           # 系统日志
tail -f /var/log/auth.log           # 认证日志
tail -f /var/log/secure             # 安全日志
tail -f /var/log/kern.log           # 内核日志
tail -f /var/log/dmesg              # 启动日志
dmesg                               # 内核消息
dmesg -T                            # 显示时间戳
dmesg -w                            # 实时监控

综合监控工具

glances - 综合监控

bash
glances                             # 启动监控
glances -w                          # Web 模式
glances -s                          # 服务器模式
glances -c 192.168.1.1              # 客户端模式
glances -t 5                        # 5秒刷新
glances -q                          # 安静模式

dstat - 综合统计

bash
dstat                               # 综合统计
dstat 1                             # 每秒刷新
dstat -c                            # CPU 统计
dstat -d                            # 磁盘统计
dstat -n                            # 网络统计
dstat -m                            # 内存统计
dstat -p                            # 进程统计
dstat -s                            # 交换统计
dstat --top-cpu                     # 显示 CPU 占用最高进程
dstat --top-mem                     # 显示内存占用最高进程
dstat --top-io                      # 显示 I/O 占用最高进程
dstat -cdn                          # CPU、磁盘、网络

sar - 系统活动报告

bash
sar                                 # CPU 使用历史
sar 1 5                             # 每秒采样,共5次
sar -u                              # CPU 统计
sar -r                              # 内存统计
sar -b                              # I/O 统计
sar -n DEV                          # 网络统计
sar -d                              # 磁盘统计
sar -q                              # 队列统计
sar -w                              # 上下文切换
sar -f /var/log/sa/sa01             # 指定日志文件
sar -s 10:00:00 -e 11:00:00         # 指定时间范围

atop - 高级监控

bash
atop                                # 启动监控
atop -P PAG                         # 内存分页
atop -P DSK                         # 磁盘
atop -P NET                        # 网络
atop -r /var/log/atop/atop_20231225 # 读取历史

性能分析

perf - 性能分析

bash
perf top                            # 实时性能分析
perf record -g command              # 记录性能数据
perf report                         # 分析记录数据
perf stat command                   # 统计性能事件
perf list                           # 列出事件

火焰图

bash
perf record -g -p 1234 sleep 10
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg

监控脚本示例

系统状态脚本

bash
#!/bin/bash
echo "=== System Status ==="
echo "Hostname: $(hostname)"
echo "Kernel: $(uname -r)"
echo "Uptime: $(uptime -p)"
echo ""
echo "=== CPU ==="
echo "Cores: $(nproc)"
echo "Load: $(cat /proc/loadavg)"
echo ""
echo "=== Memory ==="
free -h
echo ""
echo "=== Disk ==="
df -h | grep -E "^/dev|^Filesystem"
echo ""
echo "=== Network ==="
ip -br addr

进程监控脚本

bash
#!/bin/bash
echo "=== Top 10 CPU Processes ==="
ps aux --sort=-%cpu | head -11
echo ""
echo "=== Top 10 Memory Processes ==="
ps aux --sort=-%mem | head -11
echo ""
echo "=== Top 10 I/O Processes ==="
iotop -b -n 1 -o | head -11

下一步学习