今天对服务器进行压测,模拟的请求量到4万次/分的时候,进程的CPU占用就已经达到400%了(也就是把四个核都占到100%)。其实模拟的请求数据都是单一的,不会因为BUG的原因导致CPU过高。怀疑是代码里的STL用得过多,加之ttserver和memcached大量的读操作——大量的小内存分配可能带来全局的锁竞争,从而可能使得CPU过高。
之前听说过google的tcmalloc是一个很好的线程内的内存分配器,能够提高内存分配的性能。正好今天试试能不能改善我的代码的性能。 安装的过程如下: #1、到google下载代码: cd /home/ahfu/temp wget https://gperftools./files/gperftools-2.1.tar.gz
#解压 tar -zxvf google-perftools-1.4.tar.gz #看看说明 cd google-perftools-1.4 ./configure -h #选择简单的安装 mkdir -p /home/ahfu/temp/tcmalloc ./configure --disable-cpu-profiler --disable-heap-profiler --disable-heap-checker --disable-debugalloc --enable-minimal --disable-shared make && make install #在makefile里面加入一行就行 LIB = "/home/ahfu/temp/tcmalloc/lib/libtcmalloc_minimal.a" # g++ ..... ${LIB}
再进行压测! 大吃一惊! 请求量模拟到28万次/分后,CPU占用还不到20%!!!
|