`
ruilinruirui
  • 浏览: 1052841 次
文章分类
社区版块
存档分类
最新评论

TcMalloc,A Big Surprise!

 
阅读更多
Tcmalloc早有耳闻,没有进行过细节的了解,直到最近有同事在几个模块中使用,才领略到它的强大!

场景:
模块多线程并发处理输入数据,大量使用各种STL容器,运行内存30G。
程序重启,导入历史后,处理速度变慢,数个小时候后才能回到正常处理速度,处理速度慢期间,cpu idle高

分析:
重启后,缓存的内存被收回,大量内存需要重新分配,cpu频繁锁在malloc上

解决:
1. 使用STL内存分配器:__mt_alloc
参考:http://blog.csdn.net/yfkiss/article/details/6633337
2. 使用tcmalloc

使用Tcmalloc:
下载编译google-perftool(performance tool,includes TCMalloc, heap-checker, heap-profiler and cpu-profiler.)
将tcmalloc通过“-ltcmalloc”链接器标志接入模块

Tcmalloc概述
tcmalloc将内存请求分为两类,大对象请求和小对象请求,大对象为>=32K的对象。|
tcmalloc会为每个线程分配线程局部缓冲
对于小对象请求,可以直接从线程局部缓冲区获取,如果线程局部缓冲区没有空闲内存,则从central heap中一次性获取一连串小对象。
tcmalloc对于小内存,按8的整数次倍分配,对于大内存,按4K的整数次倍分配。
这样做有两个好处,一是分配的时候比较快。二是短期的收益比较大,分配的小内存至多浪费7个字节,大内存则4K
当某个线程缓存当缓存中所有对象的总共大小超过2MB的时候,会对他进行垃圾收集。垃圾收集阈值会自动根据线程数量的增加而减少,这样就不会因为程序有大量线程而过度浪费内存。
更细节可以参考:http://google-perftools.googlecode.com/svn/trunk/doc/tcmalloc.html

Tcmalloc在不需要增加任何开发代价的情况下,就可以使得程序有可能在性能上有一个飞跃,so, try it~

分享到:
评论

相关推荐

    Tcmalloc-v2.10

    tcmalloc 内存管理及内存泄漏

    vs2003-tcmalloc静态链接库

    vs2003-tcmalloc静态链接库

    tcmalloc源代码及编译安装教程

    安装tcmalloc所需的源代码,和完整编译安装应用过程。 unzip tcmalloc.zip tar -zxvf gperftools-2.1.tar.gz cd gperftools-2.1 ./configure --disable-cpu-profiler --disable-heap-profiler --disable-heap-...

    tcmalloc排查内存泄漏的方法

    tcmalloc排查内存泄漏的方法

    控制内存增长TCMALLOC.docx

    控制内存增长TCMALLOC

    基于numa架构的tcmalloc内存管理算法

    对tcmalloc算法的更改,支持numa架构,在numa架构下有更好的性能

    tcmalloc 源代码工程

    These tools are for use by developers so that they can create more robust applications. Especially of use to those developing multi-... Includes TCMalloc, heap-checker, heap-profiler and cpu-profiler.

    tcmalloc 安装包

    These tools are for use by developers so that they can create more robust applications. Especially of use to those developing multi-... Includes TCMalloc, heap-checker, heap-profiler and cpu-profiler.

    LOK封装的TCMALLOC(TztMM).zip

    这个tcmalloc很出名了,是google出的内存管理模块,比传统模块控制更合理,能应付更高的并发,而且也更稳定. 不过这个模块不是系统自带的,没有原生安装,所以需要手动去安装操作,稍微有点麻烦.这个模块包含在google封装...

    tcmalloc编译好的lib文件和dll文件

    tcmalloc编译好的lib文件和dll文件,两种编译方式,动态链接库,和静态库两种编译结果。 使用vs2019,x64

    tcmalloc

    TCM分配该存储库包含TCMalloc C ++代码。 TCMalloc是Google对C的malloc()和C ++的operator new的自定义实现,用于在C和C ++代码中进行内存分配。 TCMalloc是一种快速的多线程malloc实现。构建TCMalloc 是TCMalloc的...

    Tcmalloc.zip

    Tcmalloc含最新的libunwind-1.1.tar.gz和gperftools-2.1.tar.gz

    TCMalloc代码框架

    项目简介:该项目实现了一个简易的高并发内存池框架,将内存池设计为thread cache、central cache、page cache三层架构,从而实现高效的多线程内存管理。 核心技术:链表、哈希桶、操作系统内存管理、单例模式的设计...

    linux系统 64位下编译安装tcmalloc

    google-perftools是一个堆外内存分析工具 默认libunwind安装到/usr/local/lib,使用prefix命令指定安装目录

    tcmalloc库安装指南.txt

    tcmallc内存库的安装方法,然后在编译时将其静态链接到库cmimpl 。 target_link_libraries(cmimpl -pthread ) #######静态链接c++库################### SET_TARGET_PROPERTIES(cmimpl PROPERTIES LINK_FLAGS "-...

    mysql tcmalloc安装 - 手册

    TCMalloc(Thread-Caching Malloc)是google开发的开源工具──“google-perftools”中的成员。与标准的glibc库的malloc相比,TCMalloc在内存的分配上效率和速度要高得多,可以在很大程度上提高MySQL服务器在高并发...

    nginx优化 使用Google的开源TCMalloc库

    如果显示类似下面的信息,即表示支持tcmalloc加速 (nginx八个线程都支持) nginx 31655 www 9w REG 8,1 0 479533 /tmp/tcmalloc/.31655 nginx 31656 www 11w REG 8,1 ...

    工作小计-性能优化-gperftools/tcmalloc/pprof

    工作小计-性能优化-gperftools/tcmalloc/pprof

    浅谈redis采用不同内存分配器tcmalloc和jemalloc

    我们知道Redis并没有自己实现内存池,没有在标准的系统内存分配器上再加上自己的东西。所以系统内存分配器的性能及碎片率会对Redis造成一些性能上的影响。...#define ZMALLOC_LIB ("tcmalloc-" __xstr(TC_VERS

    tcmalloc_crash:gperftools问题1066的示例

    tcmalloc_crash gperftools问题1066的示例main.C-执行dlopen并调用已加载的.so shlib.C-打印对stdout的函数调用例子使用g ++-9.2编译.so要求dlopen'ing main()至少具有与.so一样多的tcmalloc: g++-9.2 -o ...

Global site tag (gtag.js) - Google Analytics