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

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 内存管理及内存泄漏

    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-...

    vs2003-tcmalloc静态链接库

    vs2003-tcmalloc静态链接库

    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