zoukankan      html  css  js  c++  java
  • 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的时候,会对他进行垃圾收集。垃圾收集阈值会自动根据线程数量的增加而减少,这样就不会因为程序有大量线程而过度浪费内存。

    内存泄露检测
    使用Tcmalloc的程序,用valgrind无法检测内存泄露,可以使用google-perftools提供的heap checker
    使用方法:
    export  HEAPCHECK=TYPE
    TYPE可以为:minimal、normal、strict、draconian

    更细节可以参考:http://google-perftools.googlecode.com/svn/trunk/doc/tcmalloc.html

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

  • 相关阅读:
    16.Linux yum扩展
    15.Linux软件管理
    11.Linux用户特殊权限
    10.Linux用户权限
    9.Linux用户管理(下)
    8.Linux用户管理(上)
    6.Linux文件属性及软硬链接
    5.Linux文件管理相关命令(下)
    如何解决微服务分布式事务问题
    Redis缓存和MySQL数据一致性方案(转)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318235.html
Copyright © 2011-2022 走看看