上篇介绍了systemtap的使用。
承接上篇,这篇接着纪录后续,用systemtap统计了信息,如何更加直观的观察内存分配情况,这时火焰图就派上了用场。
用stap脚本主要统计了内存超过1M并且在一段时间内未释放的内存的堆栈情况,使用火焰图的目的主要在于更加直观的看出各部分内存分配占比。
https://github.com/brendangregg/FlameGraph 主要使用这个FlamGraph来绘制生成火焰图。
clone下来之后,使用几个简单命令即可生成,这里还是以内存分配分析来举例:
第一步
./stackcollapse-stap.pl out.log > out.folded
out.log 是stap搜集到的一段时间内存分配的堆栈以及每个堆栈分配的size
类似这样
/usr/local/gcc-4.9.2/include/c++/4.9.2/ext/new_allocator.h:104
........ 堆栈地址
.........堆栈地址
21544960
/usr/local/gcc-4.9.2/include/c++/4.9.2/ext/new_allocator.h:104
........ 堆栈地址
.........堆栈地址
28966912
。。
。。
第二步
./flamegraph.pl out.folder > out.svg