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

原文地址:https://www.cnblogs.com/ghost240/p/3429762.html