zoukankan      html  css  js  c++  java
  • aoi

    云风的:http://blog.codingnow.com/2012/03/dev_note_13.html

    内存碎片优化:tcmalloc  

    性能工具:profile

    内存泄漏工具:valgrind(valgrind --leak-check=full ./test),gdb(gdb ./test core.1999 -> where)

    内存泄露检测
    使用tcmalloc的程序,用valgrind无法检测内存泄露,可以使用google-perftools提供的heap checker
    使用方法:    

    which pprof
      /usr/local/bin/pprof
    export PPROF_PATH=/usr/local/bin/pprof 
    HEAPCHECK=normal  LD_PRELOAD="/usr/local/lib/libtcmalloc.so" ./test 


    export  HEAPCHECK=TYPE
    TYPE可以为:minimal、normal、strict、draconian

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

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

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

  • 相关阅读:
    Java中@Override注解的作用
    JAVA8 双冒号::的作用
    JAVA8 Stream
    梯度下降法推导,凸函数,收敛性推导
    Maven基础
    Openflow协议详解
    KeepAlive--高可用解决方案
    Spring Cloud Alibaba:Seata基础知识
    Spring Cloud Alibaba:Sentinel初始化监控和流控
    Spring Cloud Alibaba:Nacos配置中心
  • 原文地址:https://www.cnblogs.com/ghost240/p/3429762.html
Copyright © 2011-2022 走看看