cheng029 发表于 2018-11-9 08:51:25

利用TCMalloc优化Nginx的性能

  TCMalloc的全称为Thread-Caching Malloc,是谷歌开发的开源工具google-perftools中的一个成员。与标准的glibc库的Malloc相比,TCMalloc库在内存分配效率和速度上要高很多,这在很大程度上提高了服务器在高并发情况下的性能,从而降低了系统的负载。下面简单介绍如何为Nginx添加TCMalloc库支持。
  要安装TCMalloc库,需要安装libunwind(32位操作系统不需要安装)和google-perftools两个软件包,libunwind库为基于64位CPU和操作系统的程序提供了基本函数调用链和函数调用寄存器功能。下面介绍利用TCMalloc优化Nginx的具体操作过程。
  Google-perftools的项目:http://code.google.com/p/google-perftools/
  1.安装libunwind
  # wget http://ftp.twaren.net/Unix/NonGNU//libunwind/libunwind-1.1.tar.gz
  # CFLAGS=-fPIC ./configure
  # make CFLAGS=-fPIC
  2.安装gperftools
  # wget https://gperftools.googlecode.com/files/gperftools-2.1.tar.gz
  # tar zxvf gperftools-2.1.tar.gz
  # cd gperftools-2.1
  # ./configure
  # make && make install
  至此,google-perftools安装完成。
  3.重新编译Nginx
  为了使Nginx支持google-perftools,需要在安装过程中添加“–with-google_perftools_module”选项重新编译Nginx。安装代码如下:
  # ./configure   --with-google_perftools_module--with-http_stub_status_module--prefix=/usr/local/nginx1.5
  # make && make install
  到这里Nginx安装完成。
  4.为google-perftools添加线程目录
  创建一个线程目录,这里将文件放在/tmp/tcmalloc下。操作如下:
  # mkdir /tmp/tcmalloc
  # chmod 0777 /tmp/tcmalloc
  5.修改Nginx主配置文件
  修改nginx.conf文件,在pid这行的下面添加如下代码:
  #pid      logs/nginx.pid;
  google_perftools_profiles /tmp/tcmalloc;
  接着,重启Nginx即可完成google-perftools的加载。
  # kill -Quit 16314
  启动过程遇到两个错误:
  1.# /usr/local/nginx1.5/sbin/nginx
  /usr/local/nginx1.5/sbin/nginx: error while loading shared libraries: libprofiler.so.0: cannot open shared object file: No such file or directory
  查看libprofiler.so.0库存在:
  # whereis libprofiler.so.0
  libprofiler.so: /usr/local/lib/libprofiler.so /usr/local/lib/libprofiler.so.0
  因为我的是64位系统,所以创建一个软连接到 /lib64/和/usr/lib64/下就可以了,命令
  # ln -s /usr/local/lib/libprofiler.so.0 /lib/
  # ln -s /usr/local/lib/libprofiler.so.0 /usr/lib/
  2.#/usr/local/nginx1.5/sbin/nginx
  /usr/local/nginx1.5/sbin/nginx: error while loading shared libraries: libunwind.so.8: cannot open shared object file: No such file or directory
  解决办法同上:
  # ln /usr/local/lib/libunwind.so.8 /lib64
  # ln /usr/local/lib/libunwind.so.8 /usr/lib64
  正常启动:
  #/usr/local/nginx1.5/sbin/nginx
  # netstat -tnlpu|grep nginx
  tcp      0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      7154/nginx
  验证google-perftools正常加载,可通过如下命令查看:
  # lsof -n|grep tcmalloc
  nginx      7155nobody    9w      REG            253,0      0   393594 /tmp/tcmalloc.7155
  由于在Nginx配置文件中设置worker_processes的值为1,因此开启了1个Nginx线程,每个线程会有一行记录。每个线程文件后面的数字值就是启动的Nginx的pid值。
  至此,利用TCMalloc优化Nginx的操作完成。
  最后,为MySQL添加TCMalloc库,提高MySQL在高并发情况下的性能
  修改MySQL启动脚本(根据你的MySQL安装位置而定):
  vi /usr/local/mysql/bin/mysqld_safe
  在# executing mysqld_safe的下一行,加上:
  export LD_PRELOAD=/usr/local/lib/libtcmalloc.so
  保存后退出,然后重启MySQL服务器。

页: [1]
查看完整版本: 利用TCMalloc优化Nginx的性能