tcmalloc的使用问题

我在使用cpu-profiler时,出了一点问题,这里记录一下。

tcmalloc能用作内存池,优化malloc和线程分配内存的效率。它是gperftools的一员,gperftools还提供了heap-checker,heap-profiler和cpu-profiler三个工具。

源码下载:
https://github.com/gperftools/gperftools

编译完后就可以使用tcmalloc库了:
-ltcmalloc
-ltcmalloc_minimal //不支持heap-profiler和heap-checker,只需要内存池需要减少进程大小。

其用法参考源码docs/目录下的同名html文件的使用说明即可。

问题:

根据cpuprofile.html的说明,cpu-profile的用法有三种:

  1. 无需修改程序,直接链接libtcmalloc_and_profile.so。运行前指明CPUPROFILE文件路径。程序结束后产生profile数据文件。
  2. 可以用信号来触发开始和结束监控。CPUPROFILESIGNAL=signo,signo不能被占用。
  3. 在程序里调用ProfilerStart()和ProfilerStop(),来指定要监控的代码段。

上面三种方式,最终都会产生profile文件,然后通过pprof分析。

前两种方式我没试出来(没有产生profile文件),因为tcmalloc源码中使用了单例对象来初始化和启动profile routine,由于程序没有显式调用tcmalloc的接口,所有libtcmalloc_and_profile.so并不会被加载,所以这个对象没有被初始化。
解决方法可以改改源码,主动调用库中的一个函数,或者参考heapprofile的实现方式,在ctor/dtor中调用ProfilerStart()和ProfilerStop()。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值