
## 1. 为什么每个Linux管理员都需要nmon 第一次接触nmon是在2013年维护一个电商大促系统时。凌晨3点服务器负载突然飙升用top命令看着满屏跳动的进程却找不到症结所在直到运维前辈扔给我一条nmon命令。这个黑底绿字的终端工具瞬间将CPU、内存、磁盘、网络的实时状态以矩阵形式展开异常进程的IO等待指标像红灯一样闪烁——原来是个跑偏的日志收集脚本在疯狂写磁盘。 nmon的全称是Nigels Monitor由IBM工程师Nigel Griffiths开发。与传统的top/vmstat/iostat等工具相比它的独特价值在于 - **全维度监控**单个工具同时覆盖CPU、内存、磁盘、网络、进程等12类指标 - **低开销采样**采用二进制数据收集方式对生产环境影响极小实测在32核服务器上CPU占用0.5% - **时间序列记录**支持将快照数据保存为CSV便于后期分析性能趋势 - **交互式可视化**终端内直接生成彩色动态图表无需额外图形界面 ## 2. 从安装到基础使用 ### 2.1 多平台安装方案 在主流Linux发行版上安装nmon通常有三种方式 bash # Ubuntu/Debian系 sudo apt install nmon # RHEL/CentOS系 sudo yum install epel-release sudo yum install nmon # 通用二进制安装适合无root权限环境 wget http://sourceforge.net/projects/nmon/files/nmon16e_x86.tar.gz tar zxvf nmon16e_x86.tar.gz chmod x nmon_x86_64_centos7注意生产环境建议通过包管理器安装避免二进制文件被篡改的安全风险。AIX/Solaris等Unix系统需从IBM官网下载对应版本。2.2 交互模式核心操作启动nmon后会出现如下字符界面nmon -h for help nmon16g for RHEL 8 2023 ----------------------------------------------------------- c CPU l CPU Longterm - | Main Menu m Memory j Filesystems q Quit常用快捷键对应功能cCPU使用率User/Sys/Wait/Idle分解m内存及Swap实时消耗含active/cached/buffers明细d磁盘I/O读写速率、IOPS、队列深度n网络流量按网卡分列的收发包量tTop进程列表默认按CPU排序可按内存/IO调整实测技巧在KVM虚拟化环境中按v键可显示虚拟机特定的 steal timeCPU被宿主机抢占的时间这是诊断邻居虚拟机抢资源问题的关键指标。3. 高级数据采集与分析3.1 自动化监控方案对于需要长期监控的场景可使用以下命令启动后台数据收集nmon -f -s 30 -c 120 -t -m /var/log/nmon/参数解析-f输出CSV格式文件默认命名包含主机名和时间戳-s 30每30秒采集一次样本-c 120总共采集120次即1小时数据-t包含Top进程数据-m指定输出目录生成的CSV文件可通过Excel或开源工具nmon Analyser需Java环境转换为交互式图表。下图是某次性能分析的关键指标关联图3.2 关键性能指标解读在生成的CSV报告中这些字段值得特别关注指标组字段名健康阈值异常排查方向CPUCPU%user70%检查应用代码效率MemoryMem%used90%分析内存泄漏进程DiskDiskIO%busy60%检查RAID配置/SSD寿命NetworkNetRxKB/s带宽80%排查异常连接/DDOS典型问题定位流程发现CPU%wait持续20% → 检查磁盘IO指标确认DiskAvgWait10ms → 检查存储阵列缓存策略发现某进程的DiskWriteKB异常高 → 定位到错误配置的日志服务4. 生产环境实战案例4.1 数据库服务器OOM问题排查某MySQL服务器频繁触发OOM killer传统监控只显示内存耗尽但无进程明细。通过nmon发现内存使用曲线显示cached持续增长且不释放slabtop显示大量dentry缓存通过nmon的j→k查看内核内存最终确认是未优化的文件描述符限制导致虚拟文件系统缓存膨胀解决方案# 调整内核参数 echo 2 /proc/sys/vm/drop_caches sysctl -w vm.vfs_cache_pressure1004.2 云主机性能抖动分析AWS EC2实例出现周期性卡顿nmon捕获到每5分钟出现一次CPU%steal飙升对应时间点磁盘await从2ms跃升至200ms结合-x扩展模式发现是EBS卷带宽突发配额耗尽优化方案改用gp3卷型并设置基线吞吐量将临时文件写入实例存储而非EBS5. 常见陷阱与专业建议采样间隔选择故障排查5-10秒间隔-s 5趋势分析300秒以上间隔避免CSV文件过大容器环境注意事项# 在Docker中需挂载主机proc文件系统 docker run -it --privileged -v /proc:/host/proc nmon历史数据分析技巧# 用pandas快速分析nmon日志 import pandas as pd df pd.read_csv(hostname_230815_1200.nmon) df[[CPU01%user,CPU01%sys]].plot(titleCPU Breakdown)企业级扩展方案通过crontab定期运行nmon采集使用Logstash将CSV导入Elasticsearch配合Grafana制作统一监控看板记得有次给金融客户做性能调优他们原有的监控系统每分钟采集一次数据完美错过了持续45秒的IO风暴。后来用nmon以5秒间隔捕捉到了症结——一个错误的RAID卡写策略导致每次批量提交都会引发阻塞。这种问题没有合适的工具就像在黑暗中射击而nmon就是运维手中的夜视仪。