gperftools性能测试工具介绍

    在阅读reids源码时发现redis在自身内存管理malloc/frees的时候使用到tcmalloc,google后发现此组件竟然出自google开源的gperftools性能分析工具集,然后发现许多大虾云云基于tcmalloc提升mysql等等组件的性能,带着好奇心开始接触此工具。由于初次接触,此篇文章仅介绍gperftools和简单使用gperftools,深入阅读理解待续...

一、gperftools介绍

    gperftools是Google开源的一款非常使用的性能分析工具集。主要由四个组件组成:

1、Tcmalloc内存分析器

    Tcmalloc是Thread Cache malloc的缩写,号称比ptmalloc2更快的内存管理库。

    Tcmalloc原理是为每个线程单独分配一个线程本地的Cache,少量的地址分配就直接从Cache中分配,并且定期做垃圾回收,将线程本地Cache中的空闲内存返回给全局控制堆;Tcmalloc认为小于等于32K的对象是小对象,大对象直接从全局控制堆以页为单位进行分配,所以大对象总是页对齐的;Tcmalloc中一个页可以存入一些相同大小的小对象,小对象从本地内存链表中分配,大对象从中心内存堆分配[1]。

    优势:

    1)快速:相比ptmalloc2,Tcmalloc的性能城北提升。尤其是Tcmalloc可以减少多线程之间锁的竞争问题,在小对象(32K)上能达到零竞争。

    2)占用空间小:相比ptmalloc2,tcmalloc对小对象占用空间进行了优化。例如:分配N个8字节对象只需要占用8N*1.01字节的空间。即,只需要多使用1%的空间。而ptmalloc2中每个对象都需要使用一个4字节的头信息,最后占用的字节可能达到8N*8。

    3)不易出现内存暴涨(ptmalloc2使用内存池,长时间没有将内存还给系统就会造成内存暴涨,tcmalloc可以通过MallocExtension::instance()->ReleaseFreeMemory()类设置内存还给系统的速度)。

2、Heap-profiler

    Heap-profiler是内存监控器,可以随时知道内存的使用情况[2]。

3、Heap-checker

    Heap-checker是专门检测内存泄漏的工具

4、Cpu-profiler

Cpu-profiler主要是通过采样的的方式,给出一段时间内程序实际占用cpu时间偏进行统计和分析。


二、安装

git clone https://github.com/gperftools/gperftools.git

./autogen.sh  -->  ./configure  -->make && make instll


四、简单使用

1、CPU性能测试

    Cpu-profiler工具使用很简单,包括以下步骤:

    1)编译目标程序,包含

    2)运行目标程序,在需要进行分析的代码前后分别加上ProfilerStart()和ProfilerStop();

    3)运行剖析结果转换:使用pprof工具将分析结果转换成某种可读格式的文档。

2、Tcmalloc与 ptmalloc2 性能对比

测试代码(new 100*10000个X KB字节的空间的耗时):代码并无区别,仅编译选项不同,ptmalloc2 模式下编译时无需添加-ltcmalloc,tcmalloc模式下编译时需要添加-ltcmalloc


gperftools性能测试工具介绍_第1张图片

结果对比:

                        单线程小对象      单线程大对象      五个线程小对象      五个线程大对象

tcmalloc                  0.58s                     0.69s                  2.57s                     7.29s

ptmalloc2                2.02s                      2.14s                 19.93s                   20.80s

你可能感兴趣的:(gperftools性能测试工具介绍)