Nginx 优化

Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发.

Nginx以事件驱动(epoll)的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。其拥有匹配 Lighttpd的性能,同时还没有Lighttpd的内存泄漏问题,而且Lighttpd的mod_proxy也有一些问题并且很久没有更新。但是Nginx并不支持cgi方式运行,原因是可以减少因此带来的一些程序上的漏洞。所以必须使用FastCGI方式来执行PHP程序。

nginx做为HTTP服务器,有以下几项基本特性:

处理静态文件,索引文件以及自动索引;打开文件描述符缓冲.

无缓存的反向代理加速,简单的负载均衡和容错.

FastCGI,简单的负载均衡和容错.

模块化的结构。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待。

Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率。它支持内核ePoll模型,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。

Nginx具有很高的稳定性。其它HTTP服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。例如当前apache一旦上到200个以上进程,web响应速度就明显非常缓慢了。而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。nginx官方表示保持10,000个没有活动的连接,它只占2.5M内存,所以类似DOS这样的攻击对nginx来说基本上是毫无用处的。就稳定性而言,nginx比lighthttpd更胜一筹。

Nginx支持热部署。它的启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。

ab的使用

[root@localhost bin]# ab -n 10 -c 10 http://opslinux.com/

意思是这样的:

-n表示发送多少个请求,

-c表示一次发送多少个(实际上就是把-n分批发送),

后面跟地址,注意后的斜杠。

返回信息如下(红色部分为我的注释):

This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking
http://www.yi1.com.cm/ (be patient)…..done

Server Software:        Apache/2.2.4

Server Hostname:        http://opslinux.com/

Server Port:           
80

Document
Path:          /

Document Length:        31848 bytes

Concurrency
Level:      10

Time taken for tests:   1.722254 seconds/*测试持续时间*/

Complete requests:      10/*完成请求数量*/

Failed requests:        0/*失败请求数量*/

Write errors:           0

Total transferred:      323490 bytes/*总流量*/

HTML transferred:       318480 bytes/*HTML传输量*/

Requests per second:    5.81 [#/sec] (mean)/*每秒事务数*/

Time per request:       1722.254 [ms] (mean)/*平均响应时间*/

Time per request:       172.225 [ms] (mean,
across all concurrent requests)/*每个请求响应时间(平均)*/

Transfer rate:          182.90
[Kbytes/sec] received/*传输效率*/

Connection
Times (ms)

min  mean[+/-sd] median   max

Connect:      165  166  
1.2    167     168

Processing:  1300 1418  91.5   1427    1554

Waiting:      803  925 
92.9    929    1064

Total:       1465 1585  92.2  
1595    1721

Percentage of
the requests served within a certain time (ms)

50%   1595/*50%的请求响应时间小于1595*/

66%   1620/*66%的请求响应时间小于1620*/

75%   1668

80%   1706

90%   1721

95%   1721

98%   1721

99%   1721

100%   1721 (longest request)/*最长响应时间1721*/

 

编译安装过程优化

在编译Nginx时,默认以debug模式进行,而在debug模式下会插入很多跟踪和ASSERT之类的信息,编译完成后,一个Nginx要有好几兆字节。在编译前取消Nginx的debug模式,编译完成后Nginx只有几百千字节,因此可以在编译之前,修改相关源码,取消debug模式,具体方法如下: 在Nginx源码文件被解压后,找到源码目录下的auto/cc/gcc文件,在其中找到如下几行:

# debug

CFLAGS=”$CFLAGS -g”

注释掉或删除

为特定的CPU指定CPU类型编译优化

在编译Nginx时,默认的GCC编译参数是“-O”,要优化GCC编译,可以使用以下两个参数:

--with-cc-opt='-O3'

--with-cpu-opt=CPU  #为特定的 CPU 编译,有效的值包括:pentium,
pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64

要确定CPU类型,可以通过如下命令:

[root@localhost home]#cat /proc/cpuinfo | grep "model
name"

利用TCMalloc优化Nginx的性能

TCMalloc的全称为Thread-Caching Malloc,是谷歌开发的开源工具“google-perftools”中的一个成员。与标准的glibc库的malloc相比,TCMalloc库在内存分配效率和速度上要高很多,这在很大程度上提高了服务器在高并发情况下的性能,从而降低系统负载。下面简单介绍如何为Nginx添加TCMalloc库支持。 要安装TCMalloc库,需要安装libunwind(32位操作系统不需要安装)和google-perftools两个软件包,libunwind库为基于64位CPU和操作系统的程序提供了基本函数调用链和函数调用寄存器功能。下面介绍利用TCMalloc优化Nginx的具体操作过程:

1.安装libunwind库

可以从http://download.savannah.gnu.org/releases/libunwind下载相应的libunwind版本,这里下载的是libunwind-0.99-alpha.tar.gz,安装过程如下

[root@localhost home]#tar zxvf libunwind-0.99-alpha.tar.gz

[root@localhost home]# cd libunwind-0.99-alpha/

[root@localhost libunwind-0.99-alpha]#CFLAGS=-fPIC
./configure

[root@localhost libunwind-0.99-alpha]#make CFLAGS=-fPIC

[root@localhost libunwind-0.99-alpha]#make CFLAGS=-fPIC
install

2.安装google-perftools

可以从http://google-perftools.googlecode.com下载相应的google-perftools版本,这里下载的是google-perftools-1.8.tar.gz,安装过程如下:

[root@localhost home]# tar zxvf google-perftools-1.8.tar.gz

[root@localhost home]# cd google-perftools-1.8/

[root@localhost google-perftools-1.8]# ./configure

[root@localhost google-perftools-1.8]# make && make
install

[root@localhost google-perftools-1.8]# echo
"/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf

[root@localhost google-perftools-1.8]# ldconfig

至此,google-perftools安装完成。

3.重新编译Nginx

为了使Nginx支持google-perftools,需要在安装过程中添加“–with-google_perftools_module”选项重新编译Nginx,安装代码如下:

[root@localhostnginx-0.7.65]#

./configure --user=www --group=www
--prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
--with-http_gzip_static_module --with-ipv6 --with-google_perftools_module

[root@localhost nginx-0.7.65]#make

[root@localhost nginx-0.7.65]#make install

到这里Nginx安装完成。

4.为google-perftools添加线程目录

创建一个线程目录,这里将文件放在/tmp/tcmalloc下,操作如下:

[root@localhost home]#mkdir /tmp/tcmalloc

[root@localhost home]#chmod 0777 /tmp/tcmalloc

5.修改Nginx主配置文件

修改nginx.conf文件,在pid这行的下面添加如下代码:

#pid       
logs/nginx.pid;

google_perftools_profiles /tmp/tcmalloc;

接着,重启Nginx,完成google-perftools的加载。

6.验证运行状态

为了验证google-perftools已经正常加载,通过如下命令查看:

[root@ localhost home]# lsof -n | grep tcmalloc

nginx      2395
nobody   9w  REG   
8,8       0    1599440 /tmp/tcmalloc.2395

nginx      2396
nobody   11w REG   8,8      
0    1599443 /tmp/tcmalloc.2396

nginx      2397 nobody  
13w REG  8,8        0   
1599441  /tmp/tcmalloc.2397

nginx     2398
nobody    15w REG  8,8    
0    1599442 /tmp/tcmalloc.2398

由于在Nginx配置文件中,设置worker_processes的值为4,因此开启了4个Nginx线程,每个线程会有一行记录。每个线程文件后面的数字值就是启动的Nginx的PID值。 至此,利用TCMalloc优化Nginx的操作完成。  http://edu.51cto.com/px/train/94

nginx的优化的更多相关文章

  1. nginx + SSL优化配置

    nginx + SSL优化配置: #http段添加如下配置项: http { ssl_prefer_server_ciphers on; #设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户 ...

  2. nginx 配置优化的几个参数

    nginx 配置优化的几个参数 2011-04-22 本文地址: http://blog.phpbean.com/a.cn/7/ --水平有限欢迎指正-- -- 最近在服务器上搞了一些nginx 研究 ...

  3. 【实战分享】又拍云 OpenResty / Nginx 服务优化实践

    2018 年 11 月 17 日,由 OpenResty 主办的 OpenResty Con 2018 在杭州举行.本次 OpenResty Con 的主题涉及 OpenResty 的新开源特性.业界 ...

  4. [Nginx] – 性能优化 – 配置文件优化

    Nginx基本安全优化 1.调整参数隐藏Nginx版本号信息     一般来说,软件的漏洞都和版本有关,因此我们应尽量隐藏或清除Web服务队访问的用户显示各类敏感信息(例如:Web软件名称及版本号等信 ...

  5. Nginx配置项优化详解【转】

    (1)nginx运行工作进程个数,一般设置cpu的核心或者核心数x2 如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor / ...

  6. Nginx软件优化【转】

    转自 Nginx软件优化 - 惨绿少年 - 博客园 Nginx软件优化 - 惨绿少年 - 博客园 https://www.cnblogs.com/clsn/p/8484559.html 1.1 Ngi ...

  7. Nginx软件优化

    1.1 Nginx优化分类 安全优化(提升网站安全性配置) 性能优化(提升用户访问网站效率) 1.2 Nginx安全优化 1.2.1 隐藏nginx版本信息优化 官方配置参数说明:http://ngi ...

  8. nginx配置文件优化

    nginx配置优化     #定义Nginx运行的用户和用户组user  www  www: #启动工作进程,通常设置成和cpu的数量相等worker_processes  8:   最多开启8个,8 ...

  9. Nginx配置优化参考

    Nginx配置优化参考                                                                                          ...

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

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

随机推荐

  1. Java 使用线程方式Thread和Runnable,以及Thread与Runnable的区别

    一. java中实现线程的方式有Thread和Runnable Thread: public class Thread1 extends Thread{ @Override public void r ...

  2. Beta版本冲刺——day4

    No Bug 031402401鲍亮 031402402曹鑫杰 031402403常松 031402412林淋 031402418汪培侨 031402426许秋鑫 站立式会议 今日计划表 人员 工作 ...

  3. Delphi 使用CreateProcess创建进程并弹出进程PID值 (转)

    var  ExeName:PChar;  StartupInfo:TStartupInfo;  ProcessInfo:TProcessInformation;begin  FillChar(Proc ...

  4. PHP手机,邮箱正则匹配

    /*此处用于验证手机*/ $phone_preg = '/^1[3|4|5|7|8]\d{9}$/'; $email_preg = '/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+) ...

  5. some code of c

    // // main.c // LineList // // Created by Rubert on 16/9/11. // Copyright © 2016年 Study. All rights ...

  6. maven配置多模块项目事例

    limit-parent <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// ...

  7. Silverlight ComboBox with TreeView

    本代码根据国外同名控件代码修改而来--对于N-Tier项目,要求数据源都实现一个接口显然很不方便,因此做了如下修改: 删除接口定义及相关代码 增加了DisplayMember属性,用于标明在Combo ...

  8. Axure 使用心得总结

    Axure的本意是高效快捷的完成原型制作,能够清晰的说明功能,交互就是好的,"够漂亮"就行,不需要做到很完美,至于完美还是交给专业的UI吧. 一些心得记录下来: 1.下载一些常用的 ...

  9. [POJ2096] Collecting Bugs (概率dp)

    题目链接:http://poj.org/problem?id=2096 题目大意:有n种bug,有s个子系统.每天能够发现一个bug,属于一个种类并且属于一个子系统.问你每一种bug和每一个子系统都发 ...

  10. [PAT]素因子分解(20)

    #include "stdio.h" #include "math.h" long Prime(long); long PrimeCount(long,long ...