用tcmalloc优化nginx

post by rocdk890 / 2011-9-9 14:22 Friday linux技术

  上一篇文章我做了编译安装nginx并修改版本头信息,那这次就写让nginx支持tcmalloc,废话不多说了,看教程吧.

  系统:centos 5.6
  需要的软件包: google-perftools-1.7.tar.gz

1.下载并解压tcmalloc
wget http://google-perftools.googlecode.com/files/google-perftools-1.7.tar.gz
tar zxf google-perftools-1.7.tar.gz && cd google-perftools-1.7

2.编译安装
./configure && make && make install
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig

3.让tcmalloc加入nginx中
cd ../nginx-1.0.6
./configure --user=nginx --group=nginx --add-module=../ngx_cache_purge-1.3 --add-module=../nginx-accesskey-2.0.3  --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --with-http_secure_link_module --with-http_random_index_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_perl_module --with-http_geoip_module --with-mail --with-mail_ssl_module --with-google_perftools_module --with-ld-opt='-ltcmalloc_minimal' --with-cc-opt='-O3' --with-cpu-opt=opteron

这里说下默认nginx使用的GCC编译参数是-O,需要更加优化可以使用以下两个参数:
--with-cc-opt='-O3'
使用-O2以及以上的参数,可以微量增加性能1%左右,而O2和O3基本可以认为是相同的,但我更喜欢-03.
--with-cpu-opt=*
具体是什么cpu可以cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c查看,如果是inter xeon,就写--with-cpu-opt=pentium,如果是AMD,就写--with-cpu-opt=opteron 这样编译针对特定CPU以及增加GCC的优化.
我所用这台机器的cpu是 2  AMD Athlon(tm) II X2 240 Processor,可以看到是双核心的amd cpu,所以我用的就是--with-cpu-opt=opteron.

然后执行
make
如果你是第一次安装nginx的就可以继续执行
make install

如果你已经装过nginx了并且版本比现在低或者和现在的版本一样,那你就可以不用执行make install,只需要执行下面的命令:
cp /usr/sbin/nginx /usr/sbin/nginx.old
cp objs/nginx /usr/sbin/nginx
覆盖之后执行
service nginx restart
然后再执行
nginx -V

点击查看原图
可以看到已经支持了,然后再来执行
lsof -n|grep tcmalloc
没有lsof的运行yum -y install lsof
点击查看原图
这里因为默认的nginx.conf文件里开的nginx进程是10个,所以可以看到tcmalloc对nginx的优化有这么多.再对nginx.conf配置文件进行修改
vi /etc/nginx/nginx.conf
在pid下加入一行,如下图
点击查看原图
再重启nginx,进入到/var/tmp下看有没有下图的文件
点击查看原图
如果有就表示成功了,如果没有那就检查上面执行的步骤,网上有人说tcmalloc对nginx的优化效果不是很明显,这个情况就根据你们自己的环境来选择了.

夜空- 本站版权
1、本站所有主题由该文章作者发表,该文章作者与夜空享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和夜空的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:blog.slogra.com/post-51.html

标签: nginx 整合 优化 tcmalloc 支持

  1. 2011-12-24 01:15
    @rocdk890 我折騰了快一週,自己被自己給打敗掉,我真的是新手中的新手。我用yum安裝,結果我做這些第三方的模塊的時候,居然跑的是/user/bin/nginx 這個,而不是/usr/local/nginx/sbin/nginx這個,所以在./configure編譯的時候,根本不會編譯到我的/etc/nginx/nginx裡面。真的該打屁股,但是真的很感激您的熱心幫忙,請接受小弟一拜,小弟的qq是744585809。
  1. 2011-12-23 16:00
    @nginx新手:不知道你介意把你的服务器发我,让我帮你装下试试呢?
  1. 2011-12-23 13:55
    @rocdk890 有,這個我有裝libunwind,我跑了下面:
    [root@NGINX02 ~]# cd /tmp/nginx-1.0.11
    [root@NGINX02 nginx-1.0.11]# ./configure --prefix=/etc/nginx/ \
    > --with-google_perftools_module
    checking for Google perftools ... found <----真的有抓到
    但下面nginx -V就是沒有這個with.....


    [root@NGINX02 nginx-1.0.11]# nginx -V
    nginx version: nginx/1.0.11
    built by gcc 4.4.4 20100726 (Red Hat 4.4.4-13) (GCC)
    TLS SNI support enabled
    configure arguments: --prefix=/etc/nginx/ --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-cc-opt='-O2 -g'
    [root@NGINX02 nginx-1.0.11]#
  1. 2011-12-23 09:19
    @nginx新手:那就难怪了,64位的要装libunwind
  1. 2011-12-22 22:50
    @rocdk890 就是64位元的啊

    [root@NGINX02 ~]# uname -a
    Linux NGINX02 2.6.32-131.0.15.el6.x86_64 #1 SMP Sat Nov 12 15:11:58 CST 2011 x86_64 x86_64 x86_64 GNU/Linux
    [root@NGINX02 ~]#
  1. 2011-12-22 22:38
    @nginx新手:你的系统是不是64位的?
  1. 2011-12-22 19:21
    步驟1和步驟2我都做完了,在做步驟3的時候,都可以found google_perftools_module,但是在nginx -V的時候,都不會顯示,因為不會顯示,所以google_perftools_module放進去nginx.conf的時候,都無法正常。
  1. 2011-12-22 17:38
    @nginx新手:如果你没有编译google-perftools-1.7,请先按照我文章中的第2步先编译google-perftools-1.7,然后再在nginx中加入,不知道你的环境是否跟我的一样.
  1. 2011-12-22 15:34
    @rocdk890那意思是說,--with-google_perftools_module=/path/to/google_perftools_module要這樣做,才可以被NGINX編譯到裡面去,對嗎?因為我執行nginx -V的結果,都無法顯示出第三方的-add-module和--with。有好的建議嗎?
  1. 2011-12-22 14:39
    @nginx新手:cp的是在nginx的编译包里执行,不是让你在系统根目录下copy的,--with-google_perftools_module这个是针对tcmalloc的,也就是google-perftools-1.7.tar.gz这个包,如果你没有解压这个包,当然就无法编译.
  1. 2011-12-22 13:24
    cp objs/nginx /usr/sbin/nginx 這段是把/objs下面的bin檔覆蓋掉sbin裡面的嗎?可是在根目錄根本就沒有/objs啊???
    另,做了./configure --with-google_perftools_module 之後,nginx -V裡面也沒有顯示 --with-google_perftools_module 這行,是哪裡做錯了?
  1. gravatar rocdk890
    2011-09-16 15:59
    @Ansen:为什么啊?
  1. gravatar Ansen
    2011-09-16 14:58
    博主,趁早转到WP吧……
  1. gravatar Ansen
    2011-09-16 14:49
    纯粹技术控!!!
    值得学习
    博客怎么也弄拿福能呢~

评论: