前几天买了本高俊峰的《高性能Linux服务器构建实战I》,网上都说运维必备手册,昨天看了目录加小50页感觉还是比较扩充视野的,很多东西在学校是不可能学到的,就是感觉有的地方讲的仍然不是很清楚,毕竟79块的书其实可以写到800页的....

  个人对于nginx比较感兴趣,源码的编译安装是比较熟的了,配置文件本来以为挺熟的,但是看了书上配置文件的N多命令我感觉根本玩不起来.因为实在是太多了,要背根本不现实,就算背下来不去用也会很快就忘掉.十分蛋疼~~

  书上对于Nginx的性能优化写了4种方法,下面分别讲一下:

  1、编译安装过程的优化

    在编译nginx时,默认以debug模式进行,而在debug模式下会插入很多跟踪和ASSERT之类的信息,编译完成后,一个Nginx可执行文件会有好几兆大小,而在编译前取消Nginx的debug模式,编译完成后只有几百K,因此可以在编译之前取消debug模式。具体步骤:

    ①进入源码目录,修改配置文件      

      cd /usr/local/src/nginx-1.4.2/auto/cc
      sudo vim gcc

    ②找到gcc 文件中的debug,把debug和下面一行注释掉

    

    ③为特定CPU指定CPU类型编译优化,找到NGX_GCC_OPT,添加-O3

    

    ④然后重新编译,可以看到生成的Nginx二进制文件明显变小了

    

   

  2、TCMalloc优化Nginx性能

    TCMalloc是谷歌开发的开源工具google-perftools中的一个成员,与glibc库的malloc相比,TCMalloc库在内存分配效率和速度上高很多,这在很大程度上提高了服务器的高并发性能,从而降低系统负载。

    安装google-preftools前需要安装libunwind库,下面是具体步骤:

    ①安装libunwind库

    tar xzvf libunwind-1.1.tar.gz
    cd libunwind-1.1
    CFLAGS=-fPIC ./condifure
    sudo make CFLAGS=-fPIC
    sudo make CFLAGS=-fPIC install

    ②安装google-preftools

    前面说过,TCMalloc是google-perftools中的一个成员,所以在编译安装google-preftools时不需要全部编译安装,而且选择把google-preftools的全部组件装上会有问题报错如下:

    

    正常的编译后报了这个错误,网上找解决方法有说是glibc库版本不兼容,还有说是google-perftools与libunwind版本不兼容,反正网上的解决方法很少而且大多数是要翻墙的。后来一想既然只要装TCMalloc那就把其他的都禁掉被    

    ./configure --prefix=/usr/local/gperftools --disable-cpu-profiler --disable-heap-profiler --disable-heap-checker --enable-frame-pointers --disable-dependency-tracking
    sudo make && sudo make install

    ③重新编译nginx    

  cd /use/loca/src/nginx-1.4.
  sudo ./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --prefix=/usr/local/nginx --with-http_ssl_module --add-module=/home/wj/nginx/ngx_http_echo_module --add-module=/home/wj/nginx/ngx_http_hello_world_module --add-module=/home/wj/nginx/ngx_http_test_module --with-http_stub_status_module --with-google_perftools_module

    编译结束,报错:

    

    他说是我google-perftools的库路径认不出来,网上找资料答案千篇一律,无非是google-perftools库没有导入系统,还有nginx-1.4.2/auto/lib/google-perftools/conf文件里面写的默认目录是/usr/local,所以需要加上echo “/usr/local/gperftools” >> /etc/ld.so.conf.d/usr_local_lib.conf 然后把conf文件里的/usr/local路径全部改成自己google-perftools指定的路径,我都照做了但是仍然报同样的错,我只能放弃源码安装这个方法,前面从google-perftools开始的所有步骤都作废,从libunwind源码安装结束后直接改用apt-get安装    

  sudo apt-get install libgoogle-perftools-dev

    重复上面的configure步骤,不出意外会遇到这个报错:

    

    释放出来的源码会有错?这不大可能,再看下面的提示写着所有的警告会被当成错误,所以编译失败,然后一想前面的debug被我给注释掉了,后来我把debug的注释去掉是可以编译的,但是我们的目的是优化nginx,肯定不能这么做,然后我想到了Makefile,使用find /usr/local/src/nginx-1.4.2 -name Makefile查找nginx源码目录下的makefile文件

    

    分别打开这两个文件,可以发现在第二个文件中有个-Werror选项,这就是导致错误的原因,把他注释掉

    

    改完这个直接make不需要再configure,这是个坑,我试了一个上午才试出来,如果改完此文件再configure这个文件你注释的那一段就没了也就是说-Werror选项又回来了。。

    好了前面有点乱我们来梳理一下整个过程:

    源码安装libunwind-->apt-get 安装google-perftools-->进入nginx源码目录configure生成新的配置文件-->修改makefile-->make

    make完毕直接去objs/下取nginx二进制文件即可

    

    ④创建线程目录,修改主配置文件    

    mkdir /tmp/tcmalloc
    chmod /tmp/tcmalloc

    3、Nginx内核参数优化

      这一部分我不打算写了,因为内核参数实在太多,根本背不完,所以还是不写了。

nginx性能优化技巧的更多相关文章

  1. 轻量级HTTP服务器Nginx(Nginx性能优化技巧)

    轻量级HTTP服务器Nginx(Nginx性能优化技巧)   文章来源于南非蚂蚁   一.编译安装过程优化 1.减小Nginx编译后的文件大小在编译Nginx时,默认以debug模式进行,而在debu ...

  2. Nginx性能优化技巧(6)

    一.编译安装过程优化 1.减小Nginx编译后的文件大小 在编译Nginx时,默认以debug模式进行,而在debug模式下会插入很多跟踪和ASSERT之类的信息,编译完成后,一个Nginx要有好几兆 ...

  3. Java程序性能优化技巧

    Java程序性能优化技巧 多线程.集合.网络编程.内存优化.缓冲..spring.设计模式.软件工程.编程思想 1.生成对象时,合理分配空间和大小new ArrayList(100); 2.优化for ...

  4. Python代码性能优化技巧

    摘要:代码优化能够让程序运行更快,可以提高程序的执行效率等,对于一名软件开发人员来说,如何优化代码,从哪里入手进行优化?这些都是他们十分关心的问题.本文着重讲了如何优化Python代码,看完一定会让你 ...

  5. Python 代码性能优化技巧(转)

    原文:Python 代码性能优化技巧 Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化. ...

  6. Python 代码性能优化技巧

    选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...

  7. JavaScript 性能优化技巧分享

    JavaScript 作为当前最为常见的直译式脚本语言,已经广泛应用于 Web 应用开发中.为了提高Web应用的性能,从 JavaScript 的性能优化方向入手,会是一个很好的选择. 本文从加载.上 ...

  8. Unity UI性能优化技巧

    本文将介绍一些提升Unity UI性能的技巧.更多优化技巧,可以观看Unity工程师Ian Dundore在Unite Europe 2017的演讲<使用Unity性能提升技巧>. 1.划 ...

  9. 突破10万高并发的nginx性能优化经验(含内核参数优化)

    写的很好,推荐阅读. 转载:http://www.cnblogs.com/kevingrace/p/6094007.html 在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并 ...

随机推荐

  1. 2016年工作中遇到的问题41-50:Dubbo注册中心奇葩问题,wifi热点坑了

    41.获得JSON中的变量.//显示json串中的某个变量,name是变量名function json(json,name){ var jsonObj = eval(json); return jso ...

  2. sqlserver复制表数据到另一个表

    SQL Server中,如果目标表存在: insert into 目标表 select * from 原表; SQL Server中,,如果目标表不存在: select * into 目标表 from ...

  3. python021 Python3 错误和异常

    Python3 错误和异常 作为Python初学者,在刚学习Python编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍. Python有两种错误很容易辨认:语法错误和异常. ...

  4. shell脚本简单密码加密

    #!/bin/sh #输入密码 echo "请输入原密码:" read resultFirst firstPWD=$resultFirst echo "请再次输入原密码: ...

  5. 【分段哈希】H. Paint the Wall

    https://www.bnuoj.com/v3/contest_show.php?cid=9147#problem/H [题意] 在一个长为H,宽为W的白墙上选一个矩形区域涂颜色,后涂的颜色会覆盖先 ...

  6. 将登录等信息保存到session中和退出session

    JShop简介:jshop是一套使用Java语言开发的B2C网店系统,致力于为个人和中小企业提供免费.好用的网店系统. 项目主页:http://git.oschina.net/dinguangx/js ...

  7. 《effective C++》:条款07——为多态基类声明virtual析构函数

    在继承中,基类的析构函数需要定义为虚析构函数数否则: (1)当派生类对象经由一个base类指针删除时,而这个base类的析构函数不是虚函数时,其结果是未定义的. (2)这样做会导致derived类部分 ...

  8. 用Google Analytics UTM标注社会化媒体分享流量来源

    随着社会化媒体营销概念近两年的日益盛行,敢于吃螃蟹的营销工作者们展开了一些尝试,发现对社会化营销效果进行综合评估是一大难点,价值难以衡量.主要原因在于它的营销效果中混杂了直接的目标转化.品牌宣传.品牌 ...

  9. P1003 铺地毯(noip 2011)

    洛谷——P1003 铺地毯 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯 ...

  10. CoolCTO - 创业者的技术合伙人

    CoolCTO - 创业者的技术合伙人