性能监控工具nmon & FlameGraph

"performance test"

Posted by leiyiming on September 11, 2018

nmon


nmon 是一个能够监测CPU、内存、IO等系统资源使用情况的工具,既能够像top那样实时显示,也能支持录制一段时间的数据,并通过excel来绘制图表。

安装(Centos 7)

$ yum install epel-release && yum install nmon

实时显示

运行

$ nmon

会看到下面的显示:

下面的按键列表对应着实时显示的系统资源情况,例如,按 c 会显示CPU使用情况,按 m 会显示内存使用情况,支持多选。例如,选中CPU、Memory、Network,只需要按 cmn

录制并绘图

数据录制模式下,需要下载专门的VBA分析工具,下载地址

解压后有文件 nmon analyser v55.xlsm ,其中包含了解析需要的宏。稍后会用到。

数据收集模式的详细帮助:

常用命令:

$ nmon -s1 -c120 -f -m .
  • -s1:间隔1秒一次数据快照
  • -c120:总共录制120张数据快照
  • -f:使用默认的命名方式,即 <hostname>_YYYYMMDD_HHMM.nmon
  • -m .: 将录制文件保存在当前目录下

再用之前提到的解析工具进行解析,点击 nmon analyser v55.xlsm 中的Analyze nmon data ,选中刚刚生产的.nmon文件,即可绘制出图表。

perf + FlameGraph

1. perf

perf 是linux下用于记录程序运行情况的工具,能够监控堆栈以及各种软硬件事件。下面只记录简单用法

$ perf record --call-graph dwarf -e cpu-clock -a -g -p 1
  • -g:额外记录函数的调用关系
  • -e:记录事件 cpu-clock,即对应函数占用cpu周期
  • -p:指定监控程序的PID

程序运行完之后,perf record会生成一个名为perf.data的文件,如果之前已有,那么之前的perf.data文件会被重命名为perf.data.old。

获得这个perf.data文件之后,可以通过 perf report 直接进行查看,它会自动加载当前目录下的 perf.data 文件。但是这样显示非常不直观,所以就引入了火焰图。

2、使用火焰图展示结果

  1. Flame Graph项目位于GitHub上:https://github.com/brendangregg/FlameGraph

  2. 可以用git将其clone下来:git clone https://github.com/brendangregg/FlameGraph.git

我们以perf为例,看一下flamegraph的使用方法:

1、第一步

$sudo perf record -e cpu-clock -g -p 1

Ctrl+c 结束执行后,在当前目录下会生成采样数据perf.data.

2、第二步

用perf script工具对perf.data进行解析

perf script -i perf.data &> perf.unfold

3、第三步

将perf.unfold中的符号进行折叠:

#./stackcollapse-perf.pl perf.unfold &> perf.folded

4、最后生成svg图:

./flamegraph.pl perf.folded > perf.svg

生成的火焰图如下:

从下至上代表函数调用层次,越宽代表占用CPU周期越多。格式是svg,点击某一个方块,可以放大显示其详细信息。

脚本:

#!/bin/bash

rm -f perf.data
rm -f perf.unfold
rm -f perf.folded
rm -f perf.svg

perf record -e cpu-clock -g -p 1

perf script -i perf.data &> perf.unfold

./FlameGraph/stackcollapse-perf.pl perf.unfold &> perf.folded
./FlameGraph/flamegraph.pl perf.folded > perf.svg