首页 > 系统相关 >cpu、内存问题排查——gperftools 性能测试工具介绍

cpu、内存问题排查——gperftools 性能测试工具介绍

时间:2023-03-09 10:34:51浏览次数:37  
标签:ptmalloc2 对象 内存 测试工具 gperftools tcmalloc cpu Tcmalloc

    在阅读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 install

四、简单使用

1、CPU性能测试

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

    1)编译目标程序,包含<google/profilter.h>或<gperftools/profiler.h>

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

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

2、Tcmalloc与 ptmalloc2 性能对比

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

 

结果对比:

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

tcmalloc                  0.58s                     0.69s                  2.57s                     7.29s

ptmalloc2                2.02s                      2.14s                 19.93s                   20.80s

标签:ptmalloc2,对象,内存,测试工具,gperftools,tcmalloc,cpu,Tcmalloc
From: https://www.cnblogs.com/peifx/p/17197432.html

相关文章

  • 系统内存或者CPU出现异常时自动dump文件
    有时我们需要在系统内存或者CPU出现异常时自动dump文件,用以后续的分析,使用如下命令procdump-s5-n2-c703487823该指令的意思:“当3487823的进程CPU到达70%时,5秒内做......
  • 服务监控-来发眼里的cpu是什么样的
    cpu服务监控系列文章服务监控系列视频作为开发对cpu相关的疑问1,在多核cpu上,为什么会有并发安全问题?2,线上cpu使用率过高,该怎么办呢?3,你知道如何提高使用率,达到让程序加......
  • Linux下查看某个进程占用的CPU、内存
    1、用top命令指定固定的PIDtop-p10997结果如下所示: 查询指定进程的PIDps-ef|grepzookeeper2、使用ps查询指定进程名或者PID的占用情况ps-aux|grepz......
  • CPU
    缘分为了知晓了CPU的实现原理,在B站搜索CPU实现后,找到了一个非常好的视频教程叫做一个8位二进制CPU的设计和实现。看了之后不仅解开了心中的疑惑,也更加了解熟悉CPU了,感谢U......
  • 公司某资料子系统定期cpu过高的诊断
    背景公司里的某负责保存用户文档的子系统有时会忽然cpu很高,过了大约5分钟后又恢复正常水平。领导协调让我帮看一下(我心里是:不熟悉这个子系统里面的代码,我尽力哈......
  • CPU调速器schedutil原理分析
    1.CPU电源管理简介如果我们的能源是无限制的,那可能也不需要做现在这样复杂的电源管理控制,尤其是在嵌入式设备如手机上,在追求极致性能的同时,还要追求续航时间,二者是一对相......
  • 线程的优先级(最终还是要看cpu)
    packagecom.Java;//线程优先级调度//注意:不是调整了优先级就一定会被cpu先执行只是提高了执行概率一切还是要看cpu调度publicclassTestPriority{publicstatic......
  • top单核与32C--CPU爆表
      linux的cpu使用频率是根据cpu个数和核数决定的top,然后你按一下键盘的1,这就是单个核心的负载,不然是所有核心的负载相加,自然会超过100  单核为100%,服务器是32核的......
  • 接口测试工具:postman
    第一节、软件安装下载postman。官网地址:https://www.postman.com/downloads/第二节、界面汉化1、下载汉化包下载中文包。官网地址:https://github.com/hlmd/Postman-cn/......
  • CPU/内存分析
    一、概念理解程序运作原理:一个请求发送到服务器,首先经过网卡,然后通知cpu有待处理任务,CPU去运行操作系统指令,根据请求的端口号,找到对应的应用程序代码,安排线程去处理;由于程......