欢迎光临
我们一直在努力

Linux 性能监控:nmon

 一、nmon 介绍

nmon 是 IBM 开发的轻量级系统性能监控工具,专为 Linux、Unix 系统设计,核心用于实时监控与离线分析系统性能。

它能全面采集服务器关键性能数据,配合 nmon_analyzer 工具解析后,可生成直观图表,让性能变化趋势一目了然,无需手动整理复杂数据。

核心监控指标

  • 系统基础:CPU 使用率、内存使用、页面空间与换页速度
  • 存储相关:磁盘 IO 性能、文件系统及 NFS 状态
  • 系统细节:服务器配置信息、内核统计数据、运行队列状态
  • 进程层面:资源消耗 TOP 进程(CPU / 内存 / IO 占用排行)

工具核心优点

  • 资源占用低:基于系统自带数据统计能力采集信息,对操作系统性能影响极小,不干扰业务运行
  • 监控维度全:覆盖 CPU、内存、磁盘、网络、进程、队列等核心指标,一站式满足性能排查需求

二、nmon下载和安装

下载地址:https://nmon.sourceforge.net/pmwiki.php?n=Site.Download

找到对应的版本进行下载,我的是 almaLinux9.6 下载这个 16p 的版本。

可以在虚拟机中直接复制链接,通过 wget 命令下载:

# 下载
wget https://sourceforge.net/projects/nmon/files/nmon16p_32_binaries_feb_2024.tar.gz

# 解压
tar -zxvf nmon16p_32_binaries_feb_2024.tar.gz

解压后再输入命令:ls,就能看到很多nmon的可执行文件,这些就是nmon工具

almaLinux9.6 版本兼容 centos 的命里命令,可以使用下面命令下载,就只会下载符合当前 Linux 版本的 nmon

dnf install -y nmon

# 或者

yum install -y nmon

启动nmon

执行nmon时,需要选择正确的版本去执行所以我们需要先确定Linux的版本

查看自己linux的版本:uname -a

或者:cat /proc/version

截图中的操作系统是Ubuntu 20.04,具体以实际为准

由于当前的Linux版本是Ubuntu 所以,选择Ubuntu的nmon去执行

选择nmon_x86_64_ubuntu19去执行,选择它的原因:最接近当前的ubuntu 20.04

执行命令:./nmon_x86_64_ubuntu19

出现这个界面就成功了

almaLinux  下载的 nmon 直接就可以使用 nmon 命令进入到交互页面中,默认帮你创建好了软连接了。

nmon两种运行模式

  • 交互模式:不传递任何参数时启动nmon就是交互模式,这种模式可以通过一个固定大小的窗口来收集服务器性能指标。
  • 记录模式:如果指定-F,-f 则nmon命令处于记录模式。记录模式下,nmon不会产生固定大小的窗口,而是在后台采集数据并实时保存到数据文件当中。可以通过nmon_analyzer工具分析数据文件
  • -f : 监控结果以文件输出,默认机器名_日期_时间.nmon
  • -F :监控结果以文件输出,但是没有默认名,需要手动指定名字

交互模式

启动交互模式:

在nmon安装目录输入命令:./nmon_x86_64_ubuntu19

会看到这个界面

这个界面就是交互模式界面

下面介绍常用交互模式的参数:

cpu :c

在交互界面时,按字母"c":会看到下图中的CPU使用率

  • CPU:cpu核心
  • User%:用户占用CPU比率
  • Sys%:内核占用CPU比率
  • Wait%:CPU等待比率;CPU在等待IO时,用Wait指标来衡量
  • Idel:空闲CPU比率
内存 m

在交互界面时,按字母"m":会看到下图中出现内存使用率

PageSize:页大小

RAM-Memory:RAM内存大小

Swap-Space:交换内存大小

Active:活动内存大小

Cached:缓存大小

Buffers:Buffers缓存大小;

  • Buffer:Buffer Cache 通常用于对IO设备的写缓冲,从内存写入磁盘;
  • Cache:Page Cache 通常用于对IO设备的读缓存,为了降低磁盘读取文件的频率

Dirty:脏数据,这里指修改过但是并没有存入内存的数据

Slab:Slab缓存,slab是内存分配机制,其工作是针对一些经常分配并释放的对象,如进程描述符等,这些对象的大小一般比较小,用常规方法处理他们时会产生大量碎片,所以使用slab来处理,而slab处理时,会把这些对象缓存起来,这个缓存叫做slab缓存。slab缓存主要是用Page Cache实现的。

Writeback:回写内存,指真正写入硬盘的数据

Commit_AS:表示所有进程已经申请(已经分配)的内存总大小

Active:活跃的内存

Inactive:不活跃的内存

Mapped:映射内存

PageTables:页表,是由页表项(PTE)组成的数组。512个PTE构成一个页表页(Page-table page)。

用来控制物理空间"块"的读写访问权限。

磁盘 d

在交互界面时,按字母“d”:会看到下图中出现磁盘使用率

  • DiskName:磁盘名称
  • Busy:磁盘平均繁忙程度百分比
  • Read :每秒从磁盘读取的数据速度(以千字节为单位)
  • Write:每秒向磁盘写入的数据速度(以千字节为单位)
磁盘 D 更加详细

还可以按大写的"D",查看更详细的磁盘情况

  • DiskName:磁盘名称
  • Busy:磁盘平均繁忙程度百分比
  • Read-KB/s:每秒读取数据的数据传输率(以千字节为单位)。
  • Write-KB/s:每秒写入数据的数据传输率(以千字节为单位)。
  • Xfers:每秒传输数据的速度
  • Size:总传输数据大小(以千字节为单位)
  • Peak%:平均繁忙程度的峰值百分比
  • Peak-RW:读写磁盘峰值大小(以千字节为单位)
网络 n

在交互界面时,按字母“n”:会看到下图中出现网络使用率

  • I/F Name:网络接口名称
  • Recv=KB/s:在间隔时间内每秒接收的数据(以千字节为单位)。
  • Trans=KB/s:在间隔时间内每秒内传输的数据(以千字节为单位)。
  • packin:在间隔时间内接收到的package包数
  • packout:在间隔时间内发送的package包数
  • insize:在间隔时间内接收到的package包的大小。
  • outsize:在间隔时间内发送的package包大小。
  • Peak->Recv:每秒接收数据的峰值(以千字节为单位)。
  • Peak->Trans:每秒发送数据的峰值(以千字节为单位)。

linux 系统访问外部互联网,需要通过网卡来进行传输、接收数据,就能监控网卡查看数据大小,判断是否达到网络规定的要求,假设网络带宽 100Mbit 大概就是 12.5MByte/s,如果监控到网络是 10.MB/s 那么就可能达到网络带宽上限,可以扩展网络带宽,100Mbit 带宽不是一个数据包,而是拆分成很小的数据包,例如每个数据包 4KB,每个场景数据包大小不一定。那么每次发送都只有 4KB 的数据包大小,那么就可以降低网络数据包的大小,数据包的发送有固定的协议和用户发送的真正的数据组成,可以降低真正响应的数据大小。从而节约网络带宽。

进程 t

在交互界面时,按字母“t”:会看到下图中出现进程使用情况

  • PID:进程编号
  • %CPU Used:CPU资源使用百分比(只统计间隔时间内的CPU使用率)
  • Size KB:页面大小(单位千/字节)。
  • Res Set:进程的实内存数据与实内存文本大小的和。
  • Res Text:进程的实内存文本大小。
  • Res Data:进程的实内存数据大小。
  • Shared:共享内存大小
  • Faults Min:次要故障
  • Faults Maj:主要故障
  • Command:该进程的主要指令

进程主要分成三大结构,程序、数据、pcb,程序就是代码,数据就是用户的真正值数据也就是这里的 Res Data,pcb 就是控制进程的,有唯一标志符,描述性信息, 管理进程。

文件系统 j

在交互界面时,按字母“j”:会看到下图中出现文件系统使用情况

  • FileSystem:文件系统的名称。
  • SizeMB:文件系统的大小(以兆字节为单位)。
  • FreeMB:文件系统中的可用空间(以兆字节为单位)。
  • Use%:使用的文件系统资源百分比。
  • Type:文件类型。
  • Mount Point:文件系统挂载点。

通过这个可以直观的查看到,哪个文件使用的比较多,例如日志太多,就能通过这个来监控到哪个目录下占用文件大小。清空数据等。

最后常用命令总结表如下:

参数

作用

q

停止并退出 Nmon

h

查看帮助

c

查看 CPU 统计数据

m

查看内存统计数据

k

查看内核统计数据

n

查看网络统计数据

N

查看 NFS 统计数据

j

查看文件系统统计数据

t

查看高耗进程

V

查看虚拟内存统计数据

v

详细模式

记录模式

可以通过命令来启动nmon监控

nmon -f -s 10 -c 60 -m /root/nmon -F test.nmon

作用:在后台每个10秒采集一次数据,一共采集60次,并把采集的结果输出到/root/nmon_data文件中

参数说明

  • -f :监控结果以文件形式输出,默认机器名+日期.nmon格式
  • -F 指定输出的文件名,比如test.nmon
  • -s 指的是采样的频率,单位为毫秒
  • -c 指的是采样的次数,即以上面的采样频率采集多少次
  • -m 指定生成的文件目录

运行后,会立刻生成一个nmon数据文件,可以通过 ps 观察 nmon 的进度:

结束之后会生成 nmon 的文件,不要使用 vi 命令打开,如果 nmon 有 1G 的话,内存就会被占用 1G,建议使用 head 命令简单查看一下即可

这个数据文件需要用nmon_analyzer工具来解析

三、nmon_analyzer

下载nmon_analyzer:https://nmon.sourceforge.net/pmwiki.php?n=Site.Nmon-Analyser

解压,得到nmon_analyser v66.xlsm

这样,nmon_analyser安装完毕,接下来开始使用它

打开nmon analyser v66.xlsm

打开后发现有点儿像Excel,同时需要安装VBA支持库后才能够使用,所以我们需要安装VBA支持库,这个库只是一个插件,只要下载后就可以使用

解压他们,然后按照顺序运行安装

安装重启WPS,然后再次打开nmon_analyser_v66.xlsm,就能看到有"启用宏"按钮可以点击了

点击"启动宏"

再点击Analyze nmon data,就会弹出选择文件的窗口

在这里可以选择nmon记录模式生成的xxx.nmon文件来解析

这里我们可以试试生成一个:先在Linux中执行nmon记录模式的命令,采集数据

nmon -f -s 5 -c 60 -m /root/ -F my_nmondata.nmon

紧跟着使用stress-ng来给服务器模拟压力:

stress-ng –cpu 20 –timeout 300

然后等待300秒后再从linux中取出生成的 my_nmondata.nmon 文件到本地,这个案例的模式架构是这样的

取出nmon文件:

先看下nmon进程是否还在:ps -ef|grep nmon

下图可以看到,nmon进程不在了,说明nmon已经执行完毕

如果nmon进程还在,它可能会是这样的

nmon采集完毕后,可以在/root目录看到采集到的文件my_nmondata.nmon了

然后把my_nmondata.nmon,传到本地,用本地的nmon_analyzer去打开它

这里大家参考之前的方法打开nmon_analyzer

双击打开后,经过一段时间的加载,还会弹出一个保存窗口,它是选择解析nmon文件后,保存的文件名,这里我们依然保存在性能测试目录

保存成功后,会自动进入解析完成的my_nmondata.nmon.xlsx

同时性能测试目录下,也会生成这个文件

接下来就可以分析 nmon_analyzer 生成的图表了

详细的报告指标在另一篇文章中进行介绍。

链接:https://blog.csdn.net/sinat_28927441/article/details/154951125

四、nmonchart生成html报告

下载:https://nmon.sourceforge.net/pmwiki.php?n=Site.Nmonchart

在linux中,可以直接用wget 下载链接地址来下载

下载完后,用ls看下下载目录

然后创建一个目录nmonchart,接着解压到这个目录

mkdir nmonchart

tar -xvf nmonchart40.tar -C nmonchart

最后CD 进入这个目录,并ls查看内容

然后创建软连接到环境变量

ln -s /root/nmonchart/nmonchart /usr/local/bin/nmonchart

然后测试一下:

发现提示:-bash: /usr/local/bin/nmonchart: /usr/bin/ksh: bad interpreter: No such file or directory

这是因为没有安装ksh,安装一下

输入命令:yum install ksh -y

就会完成ksh的安装

然后再测试nmonchart命令

这样就正常了,接下来使用nmonchart生成html报告

语法:

nmonchart nmon源文件 生成的html文件

例如:

nmonchart xxx.nmon xxx.html

进入具有.nmon文件的目录(如果没有那么用nmon的记录模式生成一个)

然后可以输入生成html报告的命令:nmonchart my_nmondata.nmon my_nmonhtml.html

可以看到,上图中多了一个my_nmonhtml.html的文件,它就是html文件

五、nmon+nmonchart+tomcat动态展示html报告

首先安装 Java 和 tomcat,安装过程不再描述了。安装好之后,设置 profile 环境变量

接着用souce命令执行/etc/profile文件:source /etc/profile

执行后用echo $PATH检查环境变量,如果发现其中多了/root/jdk1.8.0_361/bin,证明jdk配置成功了

最后输入命令java -version,可以看到版本号,并且版本是1.8.0_361证明jdk安装成功

接着安装tomcat

下载tomcat的地址:https://tomcat.apache.org/whichversion.html

下载时,要注意版本号:这里我们选择tomcat 9 来下载,因为它支持jdk1.8

下载页面

进入root目录并查看下载好的 tomcat

解压tomcat: tar -xvf apache-tomcat-9.0.71.tar.gz

检查tomcat的端口,主要是查看解压的tomcat目录中,conf目录里面的server.xml的端口号。

可以发现有8080、8009、8443、8005这四个端口号,主要对用户提供服务的端口是8080,8009是AJP的端口、8443是SSL的端口、8005是关闭tomcat的端口

然后我们检查一下8080端口是否已经被使用了

输入命令:netstat -anp | grep 8080

输入后,可以看到没有查看任何端口,证明8080没有被使用;如果能查到数据,说明其他进程在用8080端口,那时我们有两个选择,要么干掉占用8080端口的进程,要么换一个端口。这里没有被占用,不用管它

启动tomcat:

先授权:chmod 755 -R apache-tomcat-9.0.71/*

然后启动:apache-tomcat-9.0.71/bin/catalina.sh start

查看Tomcat started,证明tomcat启动了,再次看一下8080端口:netstat -anp | grep 8080

可以看到启动tomcat后,8080端口已经处于LISTEN状态了,证明tomcat成功启动了,并且使用了8080端口

最后跨操作系统访问一下Linux中的tomcat

这样tomcat搭建完成

接着把生成的html文件移动到tomcat的web站点根目录中,tomcat的web站点根目录是:tomcat安装目录/webapps/

进入tomcat的web站点根目录

cd /root/apache-tomcat-9.0.71/webapps

然后创建目录nmon:mkdir nmon

接着把生成的html文件复制到nmon中

cp /root/my_nmonhtml.html ./nmon/

看一下新建的nmon中有没有复制的my_nmonhtml.html

最后在本地浏览器,访问tomcat的地址

能看到这个页面,证明使用tomcat能够实时展示nmon生成的html报告了。

后续运行nmon记录模式的命令后,再运行nmonchart nmon数据文件 nmon报告文件,最后把nmon报告文件移动到tomcat的webapps下的nmon目录中,就可以使用tomcat查看html报告了

注意:这个报告需要VPN访问国际网才能够看到具体内容,这是因为nmonchart使用了Google的技术,需要访问国际网才能访问。

赞(0)
未经允许不得转载:171主机测评 » Linux 性能监控:nmon
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址