ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

麒麟V10服务器安装nmon资源监控工具:从入门到实战

麒麟V10服务器安装nmon资源监控工具:从入门到实战 接手一台麒麟V10服务器无论是物理机还是虚拟机第一件让我踏实的事就是先把资源监控安排上。最近项目里连续部署了几台银河麒麟V10 SP3的机器x86_64、ARM64架构都有装监控工具时我首选的就是nmon。nmon这个服务器资源监控工具算不上新但它在麒麟V10这类国产操作系统上的安装和使用网上的资料零散不说还经常踩版本坑。这篇文章我把整个安装过程、参数逻辑、以及我实际操作中遇到的坑一次讲清楚项目标题叫“麒麟V10服务器操作系统安装nmon服务器资源监控工具”实际上它能解决的问题很直接CPU、内存、磁盘、网络、进程等关键资源一个工具全看到。先说这个东西适合谁。如果你手里正好有一台基于麒麟V10的服务器不管是SP1、SP2还是SP3也不管是x86_64还是ARM架构想快速知道系统当前压力在哪、想收集一段时间的性能数据用于排查问题这篇文章可以直接照着抄。如果你只是想在Linux上找个不占资源、无需图形界面就能用的监控工具nmon同样适合。它最大的特点就是轻量、免安装、原生支持交互式终端配合数据采集模式还能导出csv文件做二次分析。1. 为什么在麒麟V10上装nmon1.1 这个项目到底在解决什么问题服务器装完系统之后面临的第一道题就是“我怎么知道机器现在跑得好不好”。麒麟V10服务器版默认没有预装太多性能工具系统自带的上层监控往往只有简单的top、free、df这类命令。它们各自能看一部分指标top看CPU和进程free看内存df看磁盘空间但要把这些指标同时放在一个界面里、还要能按时间维度记录成文件原生命令就有点不够用了。nmon解决的就是这个“多维度统一观测”的需求。它由IBM开发并开源最初用于AIX系统后来推广到Linux。在终端里敲一下nmon整个屏幕会被划分成多个区域CPU、内存、磁盘、网络、文件系统、进程占用等指标实时滚动刷新不需要额外装WEB服务也不需要图形化桌面的支持只要一个SSH终端就能操作。对于必须在纯命令行环境下工作的运维场景来说这一点非常关键。我在麒麟V10上部署完一套应用后发现系统负载有些异常但用top根本看不出来瓶颈到底在CPU、磁盘还是网络。装上nmon之后同时按c、m、d、n几个键四个维度一起看问题很快就定位到了磁盘等待时间偏高。这种效率是单个系统命令给不了的。1.2 nmon和top、sar这些工具有什么不一样有人会问麒麟V10上不是有top和sar吗为什么还要装nmon。这个问题我安装前也纠结过。简单来说top适合瞬时查看sar适合周期性采样但它们在交互体验和采集格式上各有短板。top适合“此刻发生了什么”但它的输出是动态刷新的不记录历史sar能记录历史数据但需要单独配置sysstat的计划任务而且查看数据时要用sadf或sar命令解析不太直观。nmon把两者的优势结合到了一起交互模式下按按键切换指标组相当于图形化的top参数模式下以指定间隔采集数据并生成csv文件相当于不需要额外配置的sar。而且nmon的csv文件可以直接导入Excel分析工具生成CPU、内存、磁盘的图表后期做性能报告非常顺手。以我在麒麟V10上的实践来看nmon的日志采集还有一个特点它把时间戳和所有指标写到同一个文件里文件命名自带主机名和日期对于追踪某一天的异常非常有用。比如我用-s 5 -c 120采集10分钟数据之后把csv文件拉回本地用nmon analyser做图表哪个时间段CPU飙高、内存是否捉襟见肘一目了然。top和sar做不到这种开箱即用的体验。2. 安装前的准备工作认清系统和源2.1 确认麒麟V10的架构与版本在麒麟V10上装nmon最容易翻车的地方不是命令不会敲而是下载的二进制跑不起来。麒麟V10的服务器版产品线很复杂有基于x86_64的版本也有基于ARM64的版本还有一个比较常见的是飞腾、鲲鹏处理器的平台。nmon官方提供的是编译好的二进制不同CPU架构对应的文件不同混用必然报错。安装之前第一件事就是确认当前系统的架构。用下面几个命令组合可以快速弄清楚系统的底细uname -m uname -a cat /etc/kylin-release示例输出uname -m返回x86_64说明是Intel/AMD架构返回aarch64说明是ARM架构。查看/etc/kylin-release能确认具体的麒麟版本比如Kylin Linux Advanced Server release V10 SP3。另外还要确认系统的包管理方式麒麟V10服务器版默认使用yum/dnf底层兼容RPM包但也支持直接运行二进制文件。nmon的安装不需要用rpm包直接用官方发布的二进制即可所以架构信息比版本号更关键。这里说一个我实际遇到的细节麒麟V10 SP3的ARM版uname -m返回的可能是aarch64但在部分飞腾平台上会显示为aarch64或armv8lnmon官方打包文件里对应的就是nmon_aarch64_*这一组。如果下载成了nmon_x86_64_*运行时就会提示Exec format error或者cannot execute binary file这种错误和权限无关纯粹是架构不匹配。2.2 自己能搞定的依赖与下载渠道nmon本身是静态编译倾向的单个二进制理论上不依赖太多动态库。但在麒麟V10服务器版上有一个依赖是绕不开的ncurses库。ncurses负责终端图形界面的绘制没有它nmon交互模式根本起不来。麒麟V10最小化安装时不一定自带这个库所以提前补上是稳妥做法。依赖安装命令root权限下执行yum install -y ncurses ncurses-libs ncurses-base如果麒麟V10的系统源没配好这条命令可能报错。这时候可以先测试网络再检查yum源配置。还有一种情况是系统已经自带了libncurses.so.6但nmon的老版本会去找libncurses.so.5这个我在后面排查部分细说先记在心里。下载渠道方面首选是SourceForge上的nmon官方项目或者nmon作者的网站。搜索“nmon download”或者直接访问项目主页找到文件名为nmon16e_mpgincr.tar.gz的最新整合包。这个包相当贴心里面按CPU架构分好了多个二进制文件包括x86_64、aarch64、ppc64le、s390x等。麒麟V10服务器版用到的就是x86_64和aarch64这两个目录下的文件。如果你所在环境的网络访问外网不方便也可以在内部文件服务器上预先下载好或者通过能联网的机器下载后scp传过去。总之nmon不依赖麒麟的软件源这既是优点也是坑点优点是不用折腾repos坑点是必须自己找对二进制。3. 麒麟V10下nmon的完整安装与启动3.1 下载并解压对应版本假设麒麟V10服务器现在能联网我用最直接的方式把nmon的整合包下载下来。以nmon16e整合包为例wget https://sourceforge.net/projects/nmon/files/nmon16e_mpgincr.tar.gz/download -O nmon16e_mpgincr.tar.gz如果wget不存在先装一下wgetyum install -y wget下载完成后解压tar -xzf nmon16e_mpgincr.tar.gz解压后可以用ls -l查看里面的文件。每一个文件名都有明显的架构标记。在我常用的x86_64机器上文件对应的是nmon_x86_64_centos7或nmon_x86_64_rhel9这一类在ARM64机器上要找的是nmon_aarch64_centos7这一类。为什么有centos7、rhel9这样的后缀原因是nmon会针对不同的glibc版本和内核做一定适配。麒麟V10服务器的底层和主流Linux发行版兼容性做得不错x86_64版本上nmon_x86_64_centos7通常可以直接使用ARM版上nmon_aarch64_centos7也比较稳。如果后续运行报错可以换用rhel9或其他版本试试。解压后建议把用到的二进制放到一个固定位置。我在项目里习惯统一放到/opt/nmon下这样既方便管理也不会污染系统的可执行目录。命令如下mkdir -p /opt/nmon cp nmon16e_mpgincr/nmon_x86_64_centos7 /opt/nmon/nmon3.2 配置权限与软链接这一步看起来简单但绝对有讲究。首先给二进制添加可执行权限chmod x /opt/nmon/nmon然后创建软链接到/usr/local/bin这样任何用户直接敲nmon就能启动不需要每次打全路径ln -s /opt/nmon/nmon /usr/local/bin/nmon到这里nmon的“安装”其实已经完成了。为什么说安装很轻量因为它就是一个二进制文件加一个软链接不像其他监控工具一样需要启动守护进程、开放端口。这个设计对国产服务器来说非常友好尤其是在安全要求高、不允许随便开放端口的场景下nmon只在本机终端工作几乎不留下额外的网络暴露面。我遇到过不少朋友在这里卡住chmod之后直接运行结果提示Permission denied。这通常不是chmod的问题而是文件系统挂载时使用了noexec选项或者你把nmon放在了某些特殊挂载点下。最简单的验证方法是把二进制放到/opt或/usr/local/bin这些常规路径下再试。另外如果系统里有SELinux可能还需要看avc日志不过麒麟V10服务器版默认SELinux状态通常是关闭或宽容模式影响不大。3.3 启动交互界面验证安装安装完成后直接输入nmon回车就能看到全屏的实时监控界面。在麒麟V10的SSH终端里第一次启动可能会有几个适应过程窗口大小、颜色深浅、按键区域分布。这些都正常nmon的交互界面不花哨但信息密度很高。界面启动后常用按键如下按键功能cCPU核心使用率与队列信息m内存与交换分区使用情况d磁盘设备读写速率与IOPSn网络接口流量与错误包t系统Top进程排行k内核运行队列与平均负载l文件系统空间使用率h查看帮助菜单刚开始用的时候不用着急把所有键都记住先按c和m看一眼CPU和内存再按d看磁盘IO基本上对系统资源状态就有数了。如果要退出交互模式直接按q键即可不会留下任何后台进程。验证安装成功与否的标准很简单能不能进入全屏界面、各个功能键能不能正常切换。如果按某个键没有响应通常是因为当前SSH终端的键盘映射问题换一个终端工具再试即可。4. 让nmon真正派上用场数据采集与分析4.1 定时采集参数怎么定交互模式适合临时看一眼真正用于性能记录和问题复盘必须依赖nmon的采集模式。采集模式的核心参数就三个采样间隔-s、采样次数-c、输出目录-m。比如我要在麒麟V10上记录10分钟的系统数据每5秒采一次命令是nmon -s 5 -c 120 -f -m /opt/nmon/data参数解释-s 5每5秒采样一次。-c 120一共采样120次总时长600秒正好10分钟。-f文件输出模式nmon会生成一个以主机名、日期、时间命名的csv文件比如KylinV10_240509_1530.nmon。-m指定输出目录确保目录已经存在。采样结束后nmon自动退出不需要额外干预。有人喜欢加-F指定文件名但我不建议在第一次使用时用因为-F必须配合-s、-c使用而且如果文件已存在会强制覆盖容易误删数据。默认的-f命名规则更安全也方便按时间归档。还有一个参数在实际排查时很管用-d。加上-d后nmon会额外输出磁盘繁忙度相关的数据这对判断磁盘性能瓶颈非常有价值。完整命令可以写成nmon -s 10 -c 360 -f -d -m /opt/nmon/data这条命令每10秒采集一次持续1小时单文件体积大概几MB完全在可接受范围内。我建议在麒麟V10上做日常巡检时直接用这个组合数据量不会太大覆盖面又足够全。4.2 采集文件落地与再利用采集产生的nmon文件不是给你肉眼看原始文本的而是配合分析工具使用的。最常用的工具是IBM提供的nmon analyser它是一个Excel宏文件可以将nmon格式的csv文件直接转换成Excel图表。使用方式很简单打开nmon analyser.xlsm点击按钮导入nmon文件就能生成CPU、内存、磁盘、网络的多张图表。在需要出性能报告的场景下这个流程我能节省一晚上时间。如果没有Windows环境或者嫌Excel宏麻烦Linux下也有替代方案用nmonchart工具它可以把nmon文件转换成HTML格式的图表纯命令行操作适合在服务器上直接生成结果。nmonchart本质上是一个shell脚本配合gnuplot或kchart实现绘图。在麒麟V10上如果装了gnuplot直接用就行。我自己在项目里比较常用的做法是先把nmon文件从服务器取回本地再用nmon analyser出图。原因很简单nmon analyser的图表维度已经过作者优化CPU、内存、磁盘、网络在不同页面里分开放置交给开发团队看也一目了然。以下是一个我在麒麟V10采集后的文件示例KylinV10-host_240509_1530.nmon这个文件名的含义主机名KylinV10-host采样开始时间是2024年5月9日15点30分。归因到具体某次发版、某个时间段的异常这个命名规则帮了大忙。文件里记录了从开始采样到结束的所有时间点数据不会因为nmon进程退出而丢失。顺带提醒一个坑nmon文件在你手动拷贝时不要用rz之类的工具直接传到Windows并用记事本打开它是UTF-8编码的纯文本记事本打开会没有换行容易误判为乱码。用专门的编辑器或者直接导入Excel是正确姿势。5. 我踩过的坑和一些补充经验5.1 常见问题速查表麒麟V10上安装nmon真正容易出问题的地方集中在架构不匹配、动态库缺失、权限和终端适配这几个方向。我把实际操作中遇到的问题整理成了一张速查表照着排查会很快现象原因解决办法cannot execute binary fileCPU架构不匹配下载了x86版却运行在ARM上用uname -m确认架构重新下载对应二进制Exec format error二进制架构错误或文件损坏重新下载对应架构文件用file /opt/nmon/nmon检查格式error while loading shared libraries: libncurses.so.5系统只有libncurses.so.6缺少兼容库安装兼容库或用新版本nmon二进制Permission denied文件没有执行权限或挂载点noexecchmod x或把文件移到/opt下执行交互模式按键无反应终端类型不受支持或窗口太小换用xterm、termite等常见终端放大SSH窗口nmon采集文件为空-m参数指定目录不存在提前创建目录或用默认当前目录软链接创建失败目标文件路径不对或已存在同名链接确认路径先删除旧链接再重建启动后屏幕花屏远程终端色彩解析问题关闭SSH终端的颜色转换或用-x参数禁用颜色这里的libncurses.so.5缺失问题我要单独展开说一下。麒麟V10系统自带的是ncurses 6版本动态库文件名是libncurses.so.6而比较老的nmon二进制编译时链接的是libncurses.so.5。解决办法有两条第一条是找一个新版本nmon二进制它可能链接的是so.6第二条是安装ncurses-compat-libs这个兼容包它会把so.5的软链接补上。在麒麟V10上用yum搜索一下yum search ncurses如果能看到ncurses-compat-libs直接安装就行。没有的话最简单的方式是手动建立一个软链接ln -s /usr/lib64/libncurses.so.6 /usr/lib64/libncurses.so.5但这条软链接是不是稳妥取决于系统里是否存在对应的依赖关系。我在多台机器上实测新版本的nmon二进制对so.6的适配已经很好优先建议换新版其次才是做兼容链接。5.2 关于麒麟V10的一些额外提醒最后说几个不在安装步骤里、但却影响使用体验的细节。第一麒麟V10服务器版的定时任务工具是crontab。如果你需要长期定时采集比如每天10点到11点记录一段性能窗口用crontab配置即可。我自己在项目中的方案是写一个简单的脚本/opt/nmon/collect.sh内容大致如下#!/bin/bash mkdir -p /opt/nmon/data /opt/nmon/nmon -s 30 -c 120 -f -m /opt/nmon/data然后配置crontab30 10 * * * /bin/bash /opt/nmon/collect.sh这样每天10点30分开始采集一小时到11点30分自动结束。定时采集最关键的一点是脚本里最好先判断nmon是否已经在运行避免重复启动。用pgrep nmon做一个前置检查我在生产环境里就遇到过crontab短间隔重复调度导致多个采集进程同时写文件的问题。第二磁盘空间要留足。nmon采集文件虽然不大但如果长时间无人清理也会积累不少。按每10秒一条记录、连续采集一周来算一个文件大约几十MB多台机器累积下来还是可观的。我习惯在crontab里加一条每周清理7天前采集文件的命令find /opt/nmon/data -name *.nmon -mtime 7 -exec rm -f {} \;第三如果你是在虚拟机里跑麒麟V10nmon的磁盘数据反映的是虚拟磁盘的性能不是物理磁盘直接表现。这个点在做性能分析时一定注意别把虚拟机磁盘的延迟直接等同于宿主机物理盘的延迟。还有一个很多人忽视的细节麒麟V10的服务器版可能没有安装图形化桌面nmon的交互界面在纯tty或SSH下都跑得很好但如果使用某些基于web的终端比如部分运维平台自带的在线终端可能因为终端类型是xterm-256color或linux之外的值导致界面渲染异常。遇到这种情况可以用TERMxterm nmon强制指定终端类型后再启动绝大多数问题都能解决。根据我个人经验nmon装好之后真正产生价值的地方不是那个全屏界面有多好看而是你能不能坚持做周期性采集。麒麟V10这种系统平时看着一切正常真正出问题时往往需要回溯数据。提前把采集埋好事后排查就能少走很多弯路。哪怕你暂时想不起来怎么分析nmon文件先把采集启动起来后面再慢慢研究nmon analyser也不迟。最后再分享一个小技巧在麒麟V10上nmon可以搭配nmon的-g参数把磁盘组信息显示出来或者按u查看CPU利用率最高的进程UID。这些进阶按键在排查具体进程占用时极其好用。一次安装长期受益工具本身轻量简单不需要维护装上之后把它纳入日常巡检脚本比临时抱佛脚去找监控平台要高效得多。
返回列表