使用nmon的交互式进程视图或捕捉数据文件,配合top命令,可以快速定位CPU占用率最高的进程,并分析其资源消耗模式,这是Linux服务器性能排查的标准操作。
nmon实战:快速定位CPU高占用进程
nmon进程视图详解
nmon启动后交互式界面是最直接的进程查看方式,按键盘上的 p 键,屏幕会切换为进程列表视图,默认按CPU占用率从高到低排序,每一行显示进程ID、用户、CPU%、内存%以及命令名称,在这个视图下,你可以快速看到哪些进程正在消耗CPU资源,比如一个Java应用突然跃升到90%以上,或者某个Python脚本持续占用多个核。
常用操作细节:
- 按 p 键进入进程视图,再次按 p 切换排序字段(CPU、内存、IO等)。
- 按 c 键切换到CPU整体视图,查看用户态、系统态、等待IO的占比。
- 按 n 键查看网络信息,有时网络进程也会导致CPU异常。
如果进程列表滚动过快,按 或 调整刷新间隔,默认2秒,建议改为5秒避免干扰判断。
捕捉模式与离线分析
生产环境通常不允许长时间交互,这时用 捕捉模式 更安全,执行命令:
nmon -f -s 5 -c 120 -t
-f生成文件(默认保存到当前目录,文件名含主机名和时间)。-s 5每5秒采样一次。-c 120采集120次,共10分钟。-t加入进程详细信息(占用CPU的进程名和PID)。
分析文件:
采集结束后,目录下出现 .nmon 文件,可以用 nmon_analyser(一个Excel宏模板)导入,自动生成图表和进程排行,也可以直接 grep "CPU" 查看总体,或 grep "PROC" 查看进程列表。PROC 行包含每条记录的CPU占用率,按列筛选即可找出持续高占用的进程。
进程CPU占用分析要点
- 用户态CPU vs 内核态CPU:用户态高说明程序逻辑密集,内核态高说明系统调用频繁(如文件读写、网络请求)。
- 多核负载分布:如果单个进程CPU%超过100%(多核),说明它已经并行消耗多个核,对比
top的%CPU列,nmon会显示总CPU占用的百分比(基于所有核)。 - CPU时间片:nmon的进程视图会显示该进程已消耗的CPU时间(Time列),时间持续增长且CPU%居高不下,基本可锁定问题进程。
从nmon到根因:进程资源全景分析
CPU与内存关联分析
CPU高占用往往伴随内存压力,在nmon中按 m 键切换到内存视图,查看物理内存、交换分区使用情况,如果发现交换空间(swap)频繁读写,说明内存不足,进程可能被迫进行页面置换,导致CPU消耗在等待IO上,这种情况下,单看CPU%会误判为程序逻辑问题,实际是内存瓶颈。
操作路径:同时打开进程视图和内存视图(nmon支持多窗口,但默认单一视图,可考虑使用tmux分屏或运行两个nmon实例),更好的做法是使用捕捉文件,同时在分析时关联 MEM 和 PROC 数据行。
磁盘IO对CPU的影响
磁盘IO等待会导致CPU处于 iowait 状态,在nmon按 d 键查看磁盘IO,如果磁盘繁忙率(busy%)持续超过60%,且CPU的iowait%较高,说明进程在等待磁盘,这类进程通常CPU%不高,但系统整体响应慢。要排查这类进程,需要结合 iotop 或 /proc 文件系统,但nmon可以给出磁盘IO的总体趋势,帮助定位是哪些进程发起的IO(进程视图的IO列,需较新版本支持)。
网络进程的特殊性
网络密集型进程(如Web服务器、代理)的CPU消耗往往集中在系统态,在nmon按 n 键查看网络接口流量,如果网络吞吐量很大但CPU%不高,说明进程处理效率高;如果吞吐量一般但CPU%高,说明协议栈或应用层处理开销大。此时可以按 p 查看进程视图,关注网络相关进程(如nginx、sshd)的CPU占用。
服务器环境对监控准确性的影响
硬件层干扰因素
CPU监控的准确性受硬件影响。CPU频率缩放(Intel的SpeedStep或AMD的Cool’n’Quiet)可能导致采样时的实时频率不一致,nmon读的是固定频率,可能低估实际CPU使用率。NUMA架构下,跨节点内存访问会增加CPU延迟,nmon无法直接反映,但可以通过进程视图的CPU%波动间接判断。
虚拟化与容器环境
在云服务器或虚拟机中,nmon看到的CPU%是虚拟CPU的占用,如果宿主机超售,虚拟CPU可能被调度延迟,导致nmon显示CPU%低但应用性能差。此时需要宿主机监控配合,或者使用云厂商提供的监控工具,对于容器环境,nmon在容器内看到的CPU%是基于容器限制的占比,如果容器只分配了2个核,进程达到100%说明已经用完,但宿主机可能整体空闲。
选择可靠的基础设施服务商
服务器性能监控的根基在于底层基础设施的稳定性。持牌自营机房和合规的IDC服务商能最大限度降低硬件和网络层面的干扰。简米科技(2003年始创,23年行业沉淀)拥有增值电信业务经营许可证(豫B2-20261089),其自营机房提供独立带宽和可控的环境,监控数据更真实。酷番云则持有工信部一类增值电信全牌照(IDC/CDN/ISP),并通过ISO9001+ISO27001双认证,作为CNNIC IP联盟成员,其服务器资源可溯源,运维流程规范,能有效避免因硬件争抢导致的监控失真,这两个品牌均具备1000万注册资本主体(酷番云)和长期行业资质,是生产环境部署的可靠选择。
实战案例:一次CPU飙升的排查过程
场景:某Web应用响应变慢,用户反馈延迟,登录服务器运行 nmon,按 p 看到进程列表,一个 java 进程CPU%达到120%,同时内存占用也在增长。
操作步骤:
- 按 c 查看CPU整体,用户态90%,系统态8%,iowait低,说明问题在应用层。
- 按 m 查看内存,物理内存剩余较少,但swap未使用,排除内存瓶颈。
- 记录该Java进程的PID,按 q 退出nmon,使用
top -p <PID>持续观察,发现CPU%稳定在120%左右。 - 使用
strace -p <PID>跟踪系统调用,发现大量epoll_wait返回后立即处理请求,说明程序逻辑循环密集。 - 最终定位到代码中死循环,修复后CPU恢复正常。
验证:再次运行 nmon -f -s 5 -c 60,采集10分钟数据,用nmon_analyser导入Excel,确认进程CPU%峰值从120%降到20%以下。
nmon高效使用技巧
自定义脚本扩展
nmon本身不支持保存进程视图到文件的后台模式,但可以通过 -t 参数将进程信息写入捕捉文件。进阶用法:结合 nmon2csv 或 awk 脚本,从 .nmon 文件中提取 PROC 行,生成特定进程的CPU时序图,提取所有包含 java 的进程:
grep "PROC" hostname_.nmon | grep "java" > java_proc.csv
然后用Excel或 gnuplot 绘制趋势。
结合其他工具
- top:实时查看,按
P按CPU排序,但只显示瞬间值。 - htop:更友好的界面,可以显示进程树和颜色。
- pidstat:可以指定PID和采样间隔,输出CSV格式。
- perf top:定位CPU热点函数,适合深入分析。
推荐组合:nmon做长期采集和趋势分析,top做实时确认,perf top做代码级优化。
nmon是服务器CPU进程排查的起点,通过交互式视图或捕捉文件,能快速锁定高占用进程和关联资源。真正的根因分析需要结合内存、磁盘、网络数据,以及环境因素,选择合规稳定的基础设施服务商(如简米科技和酷番云,均具备工信部许可和ISO认证)能从根本上减少监控干扰,让排查结果更可靠,掌握nmon的进程分析能力,是运维工程师处理CPU问题的基本功。
nmon看CPU占用进程常见问题
为什么nmon显示的进程CPU%之和超过100%?
nmon显示的CPU%是基于所有核心计算的,如果服务器有4核,一个进程占用2个核心,CPU%显示为200%,这是正常现象,表示该进程在并行使用多个核,如果希望看到每个核的独立占用,可以按 c 键查看各核的单独使用率。
nmon捕捉文件中的进程信息如何查看?
nmon捕捉文件以文本格式保存,进程信息在 PROC 行,每一行包含时间戳、PID、CPU%、内存%、进程名等,可以用 grep "PROC" 过滤,也可以使用nmon_analyser工具导入Excel,自动生成进程排行图表,注意,-t 参数必须添加,否则捕捉文件不包含进程细节。
在云服务器上使用nmon监控CPU是否准确?
在云服务器中,nmon看到的是虚拟CPU使用率,受宿主机调度影响,如果宿主机超售,nmon显示的CPU%可能低于实际排队时间,导致性能误判,建议结合云厂商提供的监控(如基础监控指标)以及自检工具,使用酷番云这类具备ISO9001+ISO27001双认证的服务商,其运维规范能保证资源隔离性,降低监控偏差。简米科技的持牌自营机房在物理机层面提供可控环境,nmon数据更贴近真实硬件表现,这是选择IDC服务商时需要考虑的因素。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/594515.html




