强曰为道

与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

第10章:dstat与nmon

第10章:dstat与nmon

10.1 概述

工具定位

工具全称主要用途
dstatDisk Statistics多维度系统监控,替代vmstat/iostat/netstat
nmonNigel’s Monitor系统性能监控,支持交互和批处理

为什么选择这两个工具

  1. dstat - 多维度实时监控,插件丰富,CSV导出
  2. nmon - 交互式界面,详细报告,适合AIX/Linux

与其他工具对比

特性dstatnmonvmstatiostat
CPU监控
内存监控
磁盘监控
网络监控
CSV导出
插件系统
交互界面

10.2 dstat详解

10.2.1 安装

# Debian/Ubuntu
sudo apt update
sudo apt install dstat

# CentOS/RHEL
sudo yum install dstat

# Fedora
sudo dnf install dstat

# Arch Linux
sudo pacman -S dstat

# pip安装
pip install dstat

10.2.2 基本用法

# 默认输出(CPU、磁盘、网络、分页、系统)
dstat

# 每2秒刷新,共10次
dstat 2 10

# 持续监控
dstat 1

10.2.3 输出解读

----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw
  5   2  92   1   0   0| 123k  456k|   0     0 |   0     0 | 234  1234
  8   3  88   1   0   0| 234k  567k| 123k  456k|   0     0 | 345  2345
  6   2  91   1   0   0| 345k  678k| 234k  567k|   0     0 | 456  3456

字段详解

面板字段含义
total-cpu-usageusr用户空间
sys内核空间
idl空闲
waiIO等待
hiq硬件中断
siq软件中断
dsk/totalread磁盘读取
writ磁盘写入
net/totalrecv网络接收
send网络发送
pagingin页面换入
out页面换出
systemint中断数
csw上下文切换

10.2.4 常用选项

CPU选项

dstat -c                    # CPU统计
dstat -C 0,1,total         # 指定CPU核心

磁盘选项

dstat -d                    # 磁盘统计
dstat -D sda,sdb           # 指定磁盘

网络选项

dstat -n                    # 网络统计
dstat -N eth0,eth1         # 指定接口

内存选项

dstat -m                    # 内存统计
dstat -g                    # 页面统计
dstat -s                    # Swap统计

系统选项

dstat -y                    # 系统统计(中断/上下文切换)
dstat -l                    # 负载统计
dstat -p                    # 进程统计

输出选项

dstat --output output.csv   # 输出到CSV
dstat -t                    # 带时间戳
dstat --nocolor             # 无颜色

10.2.5 高级选项

组合选项

# CPU + 磁盘 + 网络
dstat -c -d -n

# 所有统计
dstat -cdnmsgypl

# 指定间隔和次数
dstat -cdn 2 10

输出格式

# CSV格式
dstat --output output.csv

# 带时间戳
dstat -t --output output.csv

# 无颜色(适合文件输出)
dstat --nocolor --output output.csv

10.2.6 插件系统

查看可用插件

dstat --list

常用插件

# CPU详细信息
dstat --cpu-adv

# 磁盘详细信息
dstat --disk-adv

# 网络详细信息
dstat --net-adv

# 内存详细信息
dstat --mem-adv

# top CPU消耗进程
dstat --top-cpu

# top 内存消耗进程
dstat --top-mem

# top IO消耗进程
dstat --top-io

# top 延迟进程
dstat --top-latency

# 电池状态
dstat --battery

# 温度
dstat --thermal

# NFS统计
dstat --nfs3

插件组合

# CPU + 磁盘 + top进程
dstat -c -d --top-cpu --top-io

# 网络 + 内存 + top进程
dstat -n -m --top-mem

# 全面监控
dstat -cdnmsg --top-cpu --top-mem --top-io

10.2.7 CSV导出

基本导出

# 导出到CSV
dstat --output /tmp/dstat.csv

# 带时间戳
dstat -t --output /tmp/dstat.csv

# 指定间隔
dstat -cdn 5 --output /tmp/dstat.csv

高级导出

# 导出5分钟数据,每秒采样
dstat -cdn -t 1 300 --output /tmp/dstat_5min.csv

# 后台运行
nohup dstat -cdn -t 60 --output /tmp/dstat_hourly.csv &

CSV分析

# 查看CSV文件
head -20 /tmp/dstat.csv

# 使用awk分析
awk -F',' '{print $1, $2}' /tmp/dstat.csv

# 使用Python分析
python3 << EOF
import pandas as pd
df = pd.read_csv('/tmp/dstat.csv', skiprows=5)
print(df.describe())
EOF

10.2.8 实战场景

场景1:CPU瓶颈分析

# 监控CPU和IO
dstat -c -d --top-cpu --top-io

场景2:内存使用监控

# 监控内存和Swap
dstat -m -s --top-mem

场景3:网络流量分析

# 监控网络流量
dstat -n -N eth0,total

场景4:磁盘IO分析

# 监控磁盘IO
dstat -d -D sda,total --top-io

场景5:性能基准测试

# 记录10分钟性能数据
dstat -cdnmsg -t 1 600 --output /tmp/benchmark.csv

10.3 nmon详解

10.3.1 安装

# Debian/Ubuntu
sudo apt update
sudo apt install nmon

# CentOS/RHEL
sudo yum install nmon

# Fedora
sudo dnf install nmon

# Arch Linux
sudo pacman -S nmon

# 从源码编译
wget http://sourceforge.net/projects/nmon/files/nmon16e_x86.tar.gz
tar xzf nmon16e_x86.tar.gz
chmod +x nmon16e_x86_linux
sudo mv nmon16e_x86_linux /usr/local/bin/nmon

10.3.2 基本使用

# 交互式界面
nmon

# 后台采集模式
nmon -f -s 10 -c 360

# 参数说明
# -f: 输出到文件
# -s 10: 每10秒采集一次
# -c 360: 采集360次(共1小时)

10.3.3 交互界面

┌───────────────────────────────────────────────────────────────────────┐
│   nmon - [H for help]                              14:32:15          │
├───────────────────────────────────────────────────────────────────────┤
│  CPU   │  Memory  │  Disk   │  Network │  Top Processes              │
│  ┌───┐ │  ┌─────┐ │  ┌───┐ │  ┌─────┐ │  ┌───────────────────────┐  │
│  │███│ │  │████ │ │  │██ │ │  │████ │ │  │ PID   CPU%  MEM%  CMD │  │
│  │███│ │  │████ │ │  │██ │ │  │████ │ │  │ 1234  45.2  12.3  nginx│  │
│  │███│ │  │████ │ │  │██ │ │  │████ │ │  │ 5678  23.1  34.5  mysqld│ │
│  └───┘ │  └─────┘ │  └───┘ │  └─────┘ │  └───────────────────────┘  │
└───────────────────────────────────────────────────────────────────────┘

交互命令

按键功能
h帮助
q退出
cCPU统计
m内存统计
d磁盘统计
n网络统计
k内核统计
j文件系统
ttop进程
l长期CPU
.只显示忙碌磁盘
+增加刷新间隔
-减少刷新间隔
0重置峰值

10.3.4 详细统计

CPU统计

# 按c显示CPU
# 显示每个CPU核心的使用率

内存统计

# 按m显示内存
# 显示物理内存、虚拟内存、Swap

磁盘统计

# 按d显示磁盘
# 显示每个磁盘的读写速率、使用率

网络统计

# 按n显示网络
# 显示每个接口的流量

Top进程

# 按t显示top进程
# 显示CPU/内存消耗最高的进程

10.3.5 批处理模式

采集数据

# 采集1小时数据,每10秒一次
nmon -f -s 10 -c 360

# 采集24小时数据,每60秒一次
nmon -f -s 60 -c 1440

# 采集到指定文件
nmon -f -s 10 -c 360 -F /tmp/perf.nmon

参数说明

参数含义示例
-f输出到文件nmon -f
-s采集间隔(秒)-s 10
-c采集次数-c 360
-F指定文件名-F perf.nmon
-t包含top进程-t
-T包含线程-T
-d磁盘统计-d
-g用户定义组-g group

10.3.6 输出文件

文件命名

# 默认命名格式
hostname_YYMMDD_HHMM.nmon

# 示例
server1_260510_1432.nmon

文件位置

# 默认在当前目录
ls *.nmon

# 指定位置
nmon -f -F /var/log/nmon/perf.nmon

文件内容

# 查看nmon文件
head -100 hostname_YYMMDD_HHMM.nmon

# 包含以下部分
# CPU_ALL - CPU统计
# MEM - 内存统计
# DISKREAD - 磁盘读
# DISKWRITE - 磁盘写
# NET - 网络统计
# TOP - top进程

10.3.7 数据分析工具

nmon analyser(Excel)

1. 下载nmon analyser Excel模板
2. 将.nmon文件导入Excel
3. 自动生成图表和报告

nmonchart

# 安装
pip install nmonchart

# 生成HTML图表
nmonchart hostname_YYMMDD_HHMM.nmon

# 生成的HTML文件可以在浏览器中查看

nmon2web

# 安装
git clone https://github.com/agoel00/nmon2web.git
cd nmon2web
pip install -r requirements.txt

# 生成Web报告
python nmon2web.py hostname_YYMMDD_HHMM.nmon

10.3.8 定时采集

cron配置

# 编辑crontab
crontab -e

# 每天凌晨1点开始采集24小时数据
0 1 * * * /usr/bin/nmon -f -s 60 -c 1440 -F /var/log/nmon/$(hostname)_$(date +\%Y\%m\%d).nmon

# 每小时采集10分钟数据
0 * * * * /usr/bin/nmon -f -s 10 -c 60 -F /var/log/nmon/$(hostname)_$(date +\%Y\%m\%d_\%H).nmon

systemd服务

# /etc/systemd/system/nmon.service
[Unit]
Description=NMON Performance Monitor
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/nmon -f -s 60 -c 1440 -F /var/log/nmon/%H_%Y%m%d.nmon
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target
# 启用服务
sudo systemctl enable nmon
sudo systemctl start nmon

10.3.9 高级配置

自定义统计项

# 只采集CPU和内存
nmon -f -s 10 -c 360 -c -m

# 只采集磁盘
nmon -f -s 10 -c 360 -d

# 只采集网络
nmon -f -s 10 -c 360 -n

包含线程信息

nmon -f -s 10 -c 360 -T

包含top进程

nmon -f -s 10 -c 360 -t

10.3.10 实战场景

场景1:长期性能监控

# 采集24小时数据
nmon -f -s 60 -c 1440 -F /var/log/nmon/perf_24h.nmon

# 分析数据
nmonchart /var/log/nmon/perf_24h.nmon

场景2:性能基准测试

# 采集10分钟数据
nmon -f -s 1 -c 600 -F /tmp/benchmark.nmon

# 运行测试
./benchmark_test

# 分析结果
nmonchart /tmp/benchmark.nmon

场景3:问题排查

# 采集1小时数据
nmon -f -s 10 -c 360 -F /tmp/troubleshoot.nmon

# 复现问题
# ...

# 分析数据
nmonchart /tmp/troubleshoot.nmon

场景4:容量规划

# 每天采集数据
# cron: 0 0 * * * nmon -f -s 60 -c 1440 -F /var/log/nmon/$(date +\%Y\%m\%d).nmon

# 月度分析
# 分析每天的数据,识别趋势

10.4 dstat vs nmon对比

特性dstatnmon
界面终端文本交互式
实时监控
历史数据CSVnmon文件
插件系统
图表生成
资源消耗
适用场景实时监控历史分析

选择建议

选择dstat

  • 需要实时监控
  • 需要插件扩展
  • 需要CSV导出
  • 轻量级需求

选择nmon

  • 需要历史分析
  • 需要图表报告
  • AIX/Linux混合环境
  • 长期数据采集

10.5 综合应用

10.5.1 dstat + nmon组合

# 实时监控用dstat
dstat -cdn --top-cpu --top-io

# 历史数据用nmon
nmon -f -s 60 -c 1440

# 结合使用
# dstat用于实时排查
# nmon用于长期记录

10.5.2 自动化脚本

#!/bin/bash
# perf_monitor.sh

LOG_DIR="/var/log/performance"
mkdir -p $LOG_DIR

# 启动nmon(后台记录)
nmon -f -s 60 -c 1440 -F $LOG_DIR/$(hostname)_$(date +%Y%m%d).nmon

# 启动dstat(实时显示)
dstat -cdn --top-cpu --top-io

10.5.3 数据整合

#!/bin/bash
# perf_report.sh

# 收集dstat数据
dstat -cdn -t 1 60 --output /tmp/dstat.csv

# 收集nmon数据
nmon -f -s 1 -c 60 -F /tmp/perf.nmon

# 生成报告
nmonchart /tmp/perf.nmon /tmp/report.html

echo "报告生成完成: /tmp/report.html"

10.6 性能开销

工具CPU占用内存占用磁盘占用
dstat<1%<10MB取决于输出
nmon<1%<10MB~1MB/小时

10.7 故障排查

问题1:dstat命令未找到

# 检查是否安装
which dstat

# 安装
sudo apt install dstat  # Debian/Ubuntu
sudo yum install dstat  # CentOS/RHEL

问题2:nmon输出文件为空

# 检查权限
ls -la /var/log/nmon/

# 手动运行测试
nmon -f -s 1 -c 10

# 检查输出
ls -la *.nmon

问题3:dstat插件不可用

# 列出可用插件
dstat --list

# 检查插件路径
ls /usr/share/dstat/

问题4:nmon文件分析失败

# 检查文件完整性
head -20 perf.nmon

# 使用nmonchart
nmonchart perf.nmon

# 检查错误
nmonchart perf.nmon 2>&1 | grep error

10.8 扩展阅读

10.9 快速参考

dstat快速参考

# 基本用法
dstat                    # 默认统计
dstat 2 10              # 2秒间隔,10次
dstat -cdn              # CPU、磁盘、网络

# 详细统计
dstat --cpu-adv          # CPU详细
dstat --disk-adv         # 磁盘详细
dstat --net-adv          # 网络详细

# Top进程
dstat --top-cpu          # top CPU进程
dstat --top-mem          # top 内存进程
dstat --top-io           # top IO进程

# 输出
dstat --output file.csv  # CSV输出
dstat -t                 # 带时间戳
dstat --nocolor          # 无颜色

nmon快速参考

# 交互模式
nmon                    # 启动交互界面

# 批处理模式
nmon -f                 # 输出到文件
nmon -f -s 10 -c 360   # 10秒间隔,360次
nmon -f -F perf.nmon    # 指定文件名

# 交互键
h    # 帮助
q    # 退出
c    # CPU
m    # 内存
d    # 磁盘
n    # 网络
t    # top进程

10.10 本章小结

本章详细介绍了dstat和nmon的使用:

  1. dstat - 多维度实时监控

    • 替代vmstat/iostat/netstat
    • 插件系统扩展
    • CSV导出功能
    • 轻量级实时监控
  2. nmon - 系统性能监控

    • 交互式界面
    • 批处理数据采集
    • 图表报告生成
    • 长期历史分析
  3. 综合应用

    • 实时监控:dstat
    • 历史分析:nmon
    • 组合使用效果最佳
  4. 实战场景

    • 性能基准测试
    • 问题排查
    • 容量规划

dstat适合实时监控,nmon适合历史分析,两者结合使用能满足大多数监控需求。


上一章: 第9章:Glances详解 下一章: 第11章:Docker容器监控