概述 前段时间讲述了Jmeter利用插件PerfMonMetricsCollector来监控压测过程中服务器资源的消耗。 一个偶然机会,我发现nmon这个工具挺不错。nmon,一款开源性能监控工具,用于监控linux系统的资源消耗信息,并能把结果输出到文件中,然后通过nmonanalyser工具产生数据文件与图形化结果。 和Jmeter插件比起来,nmon记录的信息更加全面一些。 nmon的下载安装 nmon下载地址:http:nmon。sourceforge。netpmwiki。php nmonanalyser下载地址:http:nmon。sourceforge。netpmwiki。php?nSite。NmonAnalyser nmon根据自己系统版本下载对应的安装包,本次测试使用的是nmon16mhelpsystems。tar。gz,nmonanalyser下载最新的安装包,本次测试使用的是nmonanalyserv66。zip。 1。将下载的nmon安装包上传到Linux新建目录并解压: 〔testnode06〕cdusrlocal 〔testnode06local〕mkdirnmon 〔testnode06local〕cdnmon 〔testnode06nmon〕tarzxvfnmon16mhelpsystems。tar。gz 2。根据自己系统的版本,给命令赋予可执行权限: 1〔testnode06nmon〕catetcredhatrelease 2CentOSrelease6。9(Final) 3〔testnode06nmon〕chmodxnmonx8664centos6 3。在命令行输入。nmonx8664centos6即可打开nmon界面。 在上面的交互式窗口中,可以使用nmon快捷键来显示不同的系统资源统计数据: q:停止并退出Nmon h:查看帮助 c:查看CPU统计数据 m:查看内存统计数据 d:查看硬盘统计数据 k:查看内核统计数据 n:查看网络统计数据 N:查看NFS统计数据 j:查看文件系统统计数据 t:查看高耗进程 V:查看虚拟内存统计数据 v:详细模式 此时,我们可以通过快捷键来调取关心的系统资源进行显示,该种方式显示信息实时性强,能够及时掌握系统承受压力下的运行情况。 配置nmon的环境变量 完成以上的配置后,已经可以正常使用nmon了。但是,大家有没有发现一个问题,那就是我们想使用nmon时必须找到该命令的详细路径才能使用,这样就很不方便了。此时,我们需要将nmon的命令添加到系统环境变量中去,以后我们就可以在任何地方使用该命令。 1。修改启动文件名称,让名称简单化,修改完成执行一次试试: 〔testnode06nmon〕mvnmonx8664centos6nmon 〔testnode06nmon〕。nmon 2。在命令行输入vimetcprofile,将以下内容粘贴到文本末尾,路径要改为自己的安装路径: PATHPATH:usrlocalnmon exportPATH 3。在命令行输入sourceetcprofile使配置生效,此时,可以在任意目录执行nmon命令来启动nmon。 监控 我们使用nmon来监控Jmeter压测期间的系统资源消耗情况。 1。在nmon目录下新建logs文件夹,用来存放监控文件: 〔testnode06〕cdusrlocalnmon 〔testnode06nmon〕mkdirlogs 2。在命令行输入执行命令:nmons1c80fmusrlocalnmonlogs。 参数说明: s1:每隔n秒抽样一次,这里为1秒 c80:取出多少个抽样数量,这里为80,即监控180601分钟20秒 f:按标准格式输出文件名称:YYMMDDHHMM。nmon m:指定监控文件的存放目录,m后跟指定目录,如果不指定目录会在该命令的源目录下生成相应的监控文件 此命令启动后,会在我们指定的目录下生成监控文件,并持续写入资源数据,直至80个监控点收集完成。 在此期间,测试人员不需要去手动干预。如果想停止监控,查询进程号,然后杀死该进程即可。 〔testnode06〕psefgrepnmon test88631017:05pts100:00:00nmons1c120fmusrlocalnmonlogs test911125160017:07pts100:00:00grepnmon 〔testnode06〕kill8863 bash:kill:(8863)Nosuchprocess 这里因为nmon已运行结束,所以当我kill的时候会提示Nosuchprocess。 3。运行Jmeter脚本,直至脚本运行结束。 本次压测只为了讲述使用流程,测试结果中TPS不具实际意义,为避免不必要的争议,这里将其马赛克了。 查看和分析压测结果 1。将生成的监控文件下载到本地。 2。将本地的nmonanalyserv66。zip解压,解压后的文件夹内有。pdf和。xlsm两个文件,我们打开。xlsm文件。 3。点击Analysenomndata按钮,将下载到本地的监控文件添加进去,最后会生成一个。xlsx文件,这个文件里就是我们需要的数据报告。 注意:nmonanalyser需要借助Excel的宏,WPS默认没有安装宏,即使安装了插件也容易出现异常情况,建议使用MicrosoftExcel工作表。 宏语言VisualBasicforApplication(VBA)。VisualBasic是windows环境下开发应用软件的一种通用程序设计语言,功能强大,简便易用。 VBA是它的一个子集,可以广泛地应用于Microsoft公司开发的各种软件中,例如Word、Excel、Access等。 4。需要关注的一些数据。 1)CPUALL,是服务器cpu使用率的详细数据。 User:显示在用户模式下执行的程序所使用的CPU百分比。 Sys:显示在内核模式下执行的程序所使用的CPU百分比。 Wait:显示等待IO所花的时间百分比。 Idle:显示CPU的空闲时间百分比。 有效行:由于nmon启动时间未必是应用平稳的时间,同时nmon监控时间段也许比应用施压的要长。所以nmon的结果里常常存在一些明显不合理的数据,比如前几次结果的CPU等占用明显低于中段的平均数据,或者后面几次采样结果很小,对于这样的数据我们在分析的时候要予以过滤。 2)MEM,是服务器内存使用率的概况。 在MEM表里面使用如下公式计算出每行的内存使用率并进行取平均:(MemtotalMemfreecachedbuffers)Memtotal100即((B2F2K2N2)B2100)。 通过分析内存使用率的趋势,可定位是否内存泄露情况。 有人看到内存使用率是99,就认为内存用满了,并没有区分内存分页是什么类型,这样武断的说内存用满了是不科学的。在AIX上主要关注的是计算内存占整个物理内存的百分比,linux上主要关注的是active内存占整个物理内存的百分比。 3)DiskSUMM,总体disk读、写以及IO操作。 DiskReadkbs每个磁盘执行采样数据;(磁盘设备的读速率) DiskWritekbs每个磁盘执行采样数据;(磁盘设备的写速率) IOsec每秒进行的IO数(一次IO就是控制操作一次读或写,IO块就是读或写的大小),图中为上方黑色的线,报告中写的是这个参数的值。 4)NET,网络: Totalread每秒接收到的千字节的数目,如图蓝色部分;Totalwrite每秒发送的千字节的数目,如图橙色部分。 网络TotalreadTotalwrite。 网络的指标一般要根据设备来确定,百兆网卡的意思是每秒能够传输的网络流量是100Mbps,即最大的下载速度是12。5MBs,一般服务器是千兆网卡,即125MBs。