linux nmon命令

nmon命令 是一个专业的系统性能监控和基准测试工具,最初由IBM为AIX系统开发,后来移植到Linux平台。nmon可以实时监控系统资源,也可以记录数据供事后分析,生成易于理解的图表和报告。

命令格式

# 交互式模式(实时监控)
nmon [选项]

# 数据记录模式
nmon -f -s 间隔 -c 次数 -m 目录 -t -F 文件名

# 分析模式
nmonanalyser 数据文件.csv

常用选项

选项 说明
-f 输出到CSV文件(记录模式)
-s 秒数 采样间隔(秒)
-c 次数 采样次数
-m 目录 输出文件目录
-t 包含进程统计
-F 文件名 指定输出文件名
-T 包含拓扑信息(CPU、内存)
-h 显示帮助信息
-V 显示版本信息
-x 大型系统优化模式
-g 文件名 使用自定义配置文件
-a 包含所有统计信息
-b 批量模式(无交互)
-I 百分比 CPU使用率阈值(筛选进程)
-l 行数 显示指定行数的磁盘统计
-d 详细磁盘统计
-r 名称 在输出中包含runname
-k 包含内核统计
-J 包含JFS文件系统统计
-N 包含NFS统计

交互式模式快捷键

资源监控
  • c - CPU使用率
  • m - 内存使用情况
  • d - 磁盘I/O统计
  • n - 网络统计
  • j - 文件系统统计
  • t - 进程统计
系统信息
  • l - 系统负载
  • r - 资源使用汇总
  • k - 内核统计
  • V - 虚拟内存
  • v - 详细资源
  • o - 磁盘繁忙程度
显示控制
  • q - 退出nmon
  • h - 显示帮助
  • . - 切换显示模式
  • Space - 刷新屏幕
  • 1 - 单次刷新
  • 2 - 每2秒刷新
高级功能
  • a - 远程磁盘适配器
  • y - 黄色页统计
  • W - WLM类统计
  • C - 用户自定义命令
  • M - 内存带宽
  • + - 放大显示

使用实例

1. 交互式监控(基本用法)
nmon
2. 数据记录模式(生成CSV文件)
# 每30秒采样一次,共采样10次
nmon -f -s 30 -c 10

# 指定输出目录
nmon -f -s 60 -c 60 -m /tmp/

# 包含进程统计
nmon -f -t -s 30 -c 20

# 指定输出文件名
nmon -f -F server_perf.nmon -s 10 -c 100
3. 包含拓扑信息
nmon -f -T -s 30 -c 20
4. 实时监控特定资源
# 启动nmon后按相应快捷键:
# c - CPU使用率
# m - 内存使用
# d - 磁盘I/O
# n - 网络统计
# t - 进程统计
5. 批量模式运行
# 批量模式,无交互界面
nmon -b -s 10 -c 12
6. 监控特定进程
# 只显示CPU使用率超过5%的进程
nmon -I 5

# 启动后按't'查看进程
7. 大型系统优化
# 针对大型系统的优化模式
nmon -x -f -s 30 -c 100
8. 自定义配置运行
# 使用自定义配置文件
nmon -g /etc/nmon/custom_config.txt

# 配置文件示例:
# STATMODE=ON
# TOPAS=ON
# DISK=ON
9. 查看版本和帮助
# 显示版本信息
nmon -V

# 显示帮助信息
nmon -h
10. 生成长时间监控数据
# 监控24小时,每5分钟采样一次
nmon -f -s 300 -c 288
11. 包含所有统计信息
nmon -a -f -s 30 -c 50
12. 分析nmon数据文件
# 使用nmon分析器(需要单独下载)
# 下载nmon analyser(Excel工具)
# 打开Excel,加载.nmon文件生成报告

# 或者使用命令行工具
nmonanalyser server_200101_1200.nmon

# 生成HTML报告
nmon2web server_200101_1200.nmon report.html

实际输出示例

示例1:CPU监控输出
nmon -c

CPU Utilisation (c)----------------------------------------------------------------------------
CPU User% Sys% Wait% Idle% Steal% CPUs  Frequency
  0  5.2  1.8  0.3  92.7  0.0 1600MHz
  1  6.8  2.1  0.2  90.9  0.0 1600MHz
  2  4.5  1.5  0.4  93.6  0.0 1600MHz
  3  7.2  2.3  0.1  90.4  0.0 1600MHz
  Avg 5.9  1.9  0.3  91.9  0.0
示例2:内存监控输出
nmon -m

Memory (m)------------------------------------------------------------------------------------
MemTotal:    16384000 kB
MemFree:      4096000 kB
MemAvailable: 8192000 kB
Buffers:       512000 kB
Cached:       4096000 kB
SwapCached:         0 kB
Active:       6144000 kB
Inactive:     2048000 kB
SwapTotal:    4194304 kB
SwapFree:     4194304 kB
示例3:磁盘I/O输出
nmon -d

Disk I/O (d)----------------------------------------------------------------------------------
Disk    Busy%   Read  Write   Read  Write   Read  Write   MB/s   MB/s
sda       5.2   1234    567   1.23   0.56   0.45   0.23    12.3    5.6
sdb       3.4    890    432   0.89   0.43   0.32   0.18     8.9    4.3
sdc       1.2    345    123   0.34   0.12   0.12   0.08     3.4    1.2
示例4:网络统计输出
nmon -n

Network (n)-----------------------------------------------------------------------------------
Interface  Recv-pps Recv-Mbps  Xmit-pps Xmit-Mbps  Recv-Drop% Xmit-Drop%
eth0         1234      98.7      567      45.4        0.0        0.0
lo             0        0.0        0       0.0        0.0        0.0
docker0       12       0.96       6       0.48        0.0        0.0

CSV数据文件结构

字段前缀 说明 示例数据
AAA 文件头信息 主机名,时间戳,版本等
BBBP CPU使用率 CPU编号,User%,Sys%,Wait%,Idle%
BBBM 内存统计 MemTotal,MemFree,MemAvailable等
BBBD 磁盘统计 磁盘名,Busy%,Read-KB/s,Write-KB/s
BBBN 网络统计 接口名,Recv-KB/s,Xmit-KB/s
BBBF 文件系统统计 挂载点,大小,已用,可用,使用率%
BBBJ JFS统计 JFS相关指标
BBBT 进程统计 PID,进程名,CPU%,MEM%等

nmon analyser使用

nmon analyser是一个Excel电子表格,用于分析nmon生成的CSV数据文件:

# 1. 下载nmon analyser
# 从IBM官网下载:https://www.ibm.com/support/pages/node/7100011

# 2. 收集nmon数据
nmon -f -s 30 -c 120

# 3. 打开Excel,启用宏
# 4. 点击"Analyze nmon data"按钮
# 5. 选择.nmon文件
# 6. 生成详细的分析报告(包含图表)

生成的报告包含:

  • CPU使用率趋势图
  • 内存使用情况图表
  • 磁盘I/O性能图表
  • 网络流量图表
  • 系统负载图表
  • 进程资源使用统计
  • 汇总和建议

实用场景

性能基准测试
  • 系统上线前性能测试
  • 配置变更前后对比
  • 硬件升级效果评估
  • 应用部署性能验证
故障排查
  • 性能瓶颈定位
  • 资源泄漏分析
  • 系统卡顿原因调查
  • 容量不足问题诊断
容量规划
  • 资源使用趋势分析
  • 容量需求预测
  • SLA合规验证
  • 预算规划支持
合规报告
  • 性能审计报告
  • 系统健康检查
  • 服务水平报告
  • 运维质量评估

实用命令组合

# 监控一天的性能数据(每5分钟采样)
nmon -f -s 300 -c 288 -m /var/log/nmon/

# 包含所有统计和进程信息
nmon -f -t -a -s 60 -c 60

# 自动化性能测试脚本
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
DURATION=3600  # 1小时
INTERVAL=30    # 30秒采样间隔
SAMPLES=$((DURATION / INTERVAL))

nmon -f -s $INTERVAL -c $SAMPLES -m /var/log/nmon/ -F perf_test_$DATE.nmon

# 监控工作时间的性能(9:00-18:00)
# 使用cron安排任务
0 9 * * 1-5 /usr/bin/nmon -f -s 300 -c 108 -m /var/log/nmon/

# 批量分析多个nmon文件
for file in /var/log/nmon/*.nmon; do
    filename=$(basename "$file" .nmon)
    nmonanalyser "$file" "/var/log/nmon/reports/${filename}.xlsx"
done

# 实时监控并记录关键指标
nmon -f -s 10 -c 600 2>&1 | grep -E "(CPU|MEM|DISK)" > /var/log/nmon_monitor.log
注意事项:
  • nmon数据文件可能很大,特别是长时间监控时,注意磁盘空间
  • 分析大型nmon文件可能需要较多内存,建议在性能较好的机器上分析
  • nmon analyser需要Microsoft Excel,Linux用户可使用Wine或在线转换工具
  • 监控期间避免同时运行多个nmon实例,可能影响准确性
  • 生产环境监控时,注意nmon本身的资源消耗
  • CSV文件名默认包含时间戳,便于识别和排序
  • 某些选项需要root权限才能获取完整信息

nmon与其他工具对比

特性 nmon top/htop atop glances sar
历史数据记录 ✓ CSV文件记录 ✗ 无 ✓ 二进制记录 △ 有限记录 ✓ 二进制记录
图表生成 ✓ Excel图表 ✗ 无 ✗ 无 △ 有限图表 ✗ 无
基准测试 ✓ 专业支持 ✗ 不支持 △ 有限支持 ✗ 不支持 △ 有限支持
交互式界面 △ 简单界面 ✓ 丰富界面 ✓ 丰富界面 ✓ 现代界面 ✗ 无界面
跨平台支持 △ Linux, AIX ✗ 主要为Linux ✗ Linux ✓ 多平台 ✗ Linux
数据导出 ✓ CSV格式 ✗ 无 △ 有限导出 ✓ 多种格式 △ 文本格式
推荐用途 基准测试、长期监控、报告生成 实时监控、进程管理 专业分析、故障排查 跨平台监控、Web展示 系统活动记录、历史分析

安装nmon

# 方法1:使用包管理器安装
# Ubuntu/Debian
sudo apt-get install nmon

# CentOS/RHEL/Fedora
sudo yum install nmon
# 或
sudo dnf install nmon

# Arch Linux
sudo pacman -S nmon

# 方法2:直接下载二进制文件
# 访问官方网站:http://nmon.sourceforge.net/pmwiki.php
# 选择适合你系统的版本下载
wget http://sourceforge.net/projects/nmon/files/nmon16e_x86.tar.gz
tar -xzf nmon16e_x86.tar.gz
chmod +x nmon_x86_64_centos7
sudo mv nmon_x86_64_centos7 /usr/local/bin/nmon

# 方法3:从源码编译
# 下载源码
wget http://sourceforge.net/projects/nmon/files/nmon16h.c
# 编译(需要gcc)
gcc -o nmon nmon16h.c -g -O3 -Wall -D JFS -D GETUSER -D LARGEMEM -lncurses -lm

# 验证安装
nmon -V
或
which nmon

实际案例:系统性能基准测试

案例:新服务器性能验收测试
#!/bin/bash
# 新服务器性能验收测试脚本

SERVER_NAME=$(hostname)
TEST_DATE=$(date +%Y%m%d_%H%M%S)
TEST_DURATION=7200  # 2小时测试
INTERVAL=30         # 30秒采样间隔
SAMPLES=$((TEST_DURATION / INTERVAL))
LOG_DIR="/var/log/performance_tests"
REPORT_DIR="$LOG_DIR/reports"

# 创建目录
mkdir -p "$LOG_DIR" "$REPORT_DIR"

echo "=== 服务器性能验收测试 ==="
echo "服务器: $SERVER_NAME"
echo "测试时间: $(date)"
echo "测试时长: $TEST_DURATION 秒"
echo "采样间隔: $INTERVAL 秒"
echo "采样次数: $SAMPLES"
echo "=========================="

# 1. 系统信息收集
echo "1. 收集系统信息..."
echo "主机名: $SERVER_NAME" > "$LOG_DIR/system_info_$TEST_DATE.txt"
echo "测试时间: $(date)" >> "$LOG_DIR/system_info_$TEST_DATE.txt"
echo "---" >> "$LOG_DIR/system_info_$TEST_DATE.txt"

# 收集硬件信息
lscpu >> "$LOG_DIR/system_info_$TEST_DATE.txt"
echo "---" >> "$LOG_DIR/system_info_$TEST_DATE.txt"
free -h >> "$LOG_DIR/system_info_$TEST_DATE.txt"
echo "---" >> "$LOG_DIR/system_info_$TEST_DATE.txt"
df -h >> "$LOG_DIR/system_info_$TEST_DATE.txt"

# 2. 运行性能监控
echo "2. 开始性能监控..."
echo "监控数据将保存到: $LOG_DIR/perf_$TEST_DATE.nmon"
nmon -f -s $INTERVAL -c $SAMPLES -m "$LOG_DIR" -F "perf_$TEST_DATE.nmon"

# 3. 运行压力测试(可选)
echo "3. 运行压力测试..."
# CPU压力测试
echo "CPU压力测试..." >> "$LOG_DIR/stress_test_$TEST_DATE.log"
stress-ng --cpu 4 --timeout 600 2>&1 >> "$LOG_DIR/stress_test_$TEST_DATE.log"

# 内存压力测试
echo "内存压力测试..." >> "$LOG_DIR/stress_test_$TEST_DATE.log"
stress-ng --vm 2 --vm-bytes 2G --timeout 300 2>&1 >> "$LOG_DIR/stress_test_$TEST_DATE.log"

# 磁盘压力测试
echo "磁盘压力测试..." >> "$LOG_DIR/stress_test_$TEST_DATE.log"
fio --name=test --ioengine=libaio --rw=randrw --bs=4k --numjobs=4 --size=1G --runtime=300 2>&1 >> "$LOG_DIR/stress_test_$TEST_DATE.log"

# 4. 生成报告
echo "4. 生成测试报告..."
echo "测试完成时间: $(date)" >> "$LOG_DIR/system_info_$TEST_DATE.txt"
echo "数据文件: perf_$TEST_DATE.nmon" >> "$LOG_DIR/system_info_$TEST_DATE.txt"

# 5. 打包结果
echo "5. 打包测试结果..."
tar -czf "$REPORT_DIR/performance_test_$TEST_DATE.tar.gz" \
    "$LOG_DIR/perf_$TEST_DATE.nmon" \
    "$LOG_DIR/system_info_$TEST_DATE.txt" \
    "$LOG_DIR/stress_test_$TEST_DATE.log"

echo "=== 测试完成 ==="
echo "结果文件: $REPORT_DIR/performance_test_$TEST_DATE.tar.gz"
echo "请使用nmon analyser分析数据文件"

相关工具

nmon相关工具
  • nmon analyser - Excel数据分析工具
  • nmon2web - 生成HTML报告
  • nmonchart - 生成PNG图表
  • nmon2influxdb - 导入数据到InfluxDB
替代方案
  • collectl - 类似nmon的工具
  • dstat - 资源统计工具
  • sysstat - sar等工具集合
  • NetData - 实时监控仪表板

相关命令

sar

系统活动报告器

查看详情
atop

高级系统监控工具

查看详情
glances

跨平台监控工具

查看详情