隐约感觉有内存泄露,现在的做法是,每天重启一次服务。
使用gperftools来检测内存泄露。
gperftools是Google提供的一套工具,其中的一个功能是CPU profiler,用于分析程序性能,找到程序的性能瓶颈。
首先运行sh文件,里面写明了一些环境的变量,配置等东西。运行后可以生成对应的文件。pprof.9450.0001.heap、pprof.9450.0002.heap这些。前面一个数字表明进程号等。
#! /bin/sh
env LD_PRELOAD="/home/v/lib/libtcmalloc.so" PPROF_PATH="/home/v/bin/pprof" HEAPCHECK=minimal `which $1`
然后,运行pprof --text `which gptest` --base ./pprof.9450.0001.heap ./pprof.9451.0002.heap ,就可以输出相关的文件。
运行
pprof --pdf ./demo my.prof > output.pdf这种,可以看到调用的图形。更方便直观。
最后,定位的一个错误是,在一个函数里,new了一个对象,作为指针传出去给外面使用,但最终没有释放掉。