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

1、编译安装过程优化nginx

1.减少Nginx编译后的文件大小
在编译Nginx时,默认以debug模式进行,而在debug模式下会插入不少跟踪和ASSERT之类的信息,编译完成后,一个Nginx要有好几兆字节。在编译前取消Nginx的debug模式,编译完成后Nginx只有几百千字节,所以能够在编译以前,修改相关源码,取消debug模式,具体方法以下:
在Nginx源码文件被解压后,找到源码目录下的auto/cc/gcc文件,在其中找到以下几行:服务器

  
  
           
  
  
  1. # debug  
  2. CFLAGS=”$CFLAGS -g”  

注释掉或删掉这两行,便可取消debug模式。cookie

2.为特定的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"网络

2、利用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,安装过程以下:
 socket

  
  
           
  
  
  1. [root@localhost home]#tar zxvf libunwind-0.99-alpha.tar.gz  
  2. [root@localhost home]# cd libunwind-0.99-alpha/  
  3. [root@localhost libunwind-0.99-alpha]#CFLAGS=-fPIC ./configure  
  4. [root@localhost libunwind-0.99-alpha]#make CFLAGS=-fPIC  
  5. [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,安装过程以下:
 tcp

  
  
           
  
  
  1. [root@localhost home]#tar zxvf google-perftools-1.8.tar.gz  
  2. [root@localhost home]#cd google-perftools-1.8/  
  3. [root@localhost google-perftools-1.8]# ./configure  
  4. [root@localhost google-perftools-1.8]#make && make install  
  5. [root@localhost google-perftools-1.8]#echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf  
  6. [root@localhost google-perftools-1.8]# ldconfig  

至此,google-perftools安装完成。ide

3.从新编译Nginx
为了使Nginx支持google-perftools,须要在安装过程当中添加“–with-google_perftools_module”选项从新编译Nginx,安装代码以下:
 函数

  
  
           
  
  
  1. [root@localhostnginx-0.7.65]#./configure \  
  2. >--with-google_perftools_module --with-http_stub_status_module  --prefix=/opt/nginx  
  3. [root@localhost nginx-0.7.65]#make  
  4. [root@localhost nginx-0.7.65]#make install  

到这里Nginx安装完成。高并发

4.为google-perftools添加线程目录
建立一个线程目录,这里将文件放在/tmp/tcmalloc下,操做以下:
 

  
  
           
  
  
  1. [root@localhost home]#mkdir /tmp/tcmalloc  
  2. [root@localhost home]#chmod 0777 /tmp/tcmalloc  

5.修改Nginx主配置文件
修改nginx.conf文件,在pid这行的下面添加以下代码:
 

  
  
           
  
  
  1. #pid        logs/nginx.pid;  
  2. google_perftools_profiles /tmp/tcmalloc;  

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

6.验证运行状态
为了验证google-perftools已经正常加载,经过以下命令查看:
 

  
  
           
  
  
  1. [root@ localhost home]# lsof -n | grep tcmalloc  
  2. nginx      2395 nobody   9w  REG    8,8       0    1599440 /tmp/tcmalloc.2395  
  3. nginx      2396 nobody   11w REG   8,8       0    1599443 /tmp/tcmalloc.2396  
  4. nginx      2397 nobody   13w REG  8,8        0    1599441  /tmp/tcmalloc.2397  
  5. nginx     2398 nobody    15w REG  8,8     0    1599442 /tmp/tcmalloc.2398  

因为在Nginx配置文件中,设置worker_processes的值为4,所以开启了4个Nginx线程,每一个线程会有一行记录。每一个线程文件后面的数字值就是启动的Nginx的PID值。
至此,利用TCMalloc优化Nginx的操做完成。

3、Nginx内核参数优化
内核参数的优化,主要是在Linux系统中针对Nginx应用而进行的系统内核参数优化,常见的优化参数值以下。
下面给出一个优化实例以供参考:

  
  
           
  
  
  1. net.ipv4.tcp_max_tw_buckets = 6000 
  2. net.ipv4.ip_local_port_range = 1024 65000  
  3. net.ipv4.tcp_tw_recycle = 1 
  4. net.ipv4.tcp_tw_reuse = 1 
  5. net.ipv4.tcp_syncookies = 1 
  6. net.core.somaxconn = 262144 
  7. net.core.netdev_max_backlog = 262144 
  8. net.ipv4.tcp_max_orphans = 262144 
  9. net.ipv4.tcp_max_syn_backlog = 262144 
  10. net.ipv4.tcp_synack_retries = 1 
  11. net.ipv4.tcp_syn_retries = 1 
  12. net.ipv4.tcp_fin_timeout = 1 
  13. net.ipv4.tcp_keepalive_time = 30 

将上面的内核参数值加入/etc/sysctl.conf文件中,而后执行以下命令使之生效: [root@ localhost home]#/sbin/sysctl -p 下面是对实例中选项的含义进行介绍:  net.ipv4.tcp_max_tw_buckets参数用来设定timewait的数量,默认是180000,这里设为6000。  net.ipv4.ip_local_port_range选项用来设定容许系统打开的端口范围。  net.ipv4.tcp_tw_recycle选项用于设置启用timewait快速回收。  net.ipv4.tcp_tw_reuse选项用于设置开启重用,容许将TIME-WAIT sockets从新用于新的TCP链接。  net.ipv4.tcp_syncookies选项用于设置开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies进行处理。  net.core.somaxconn选项默认值是128, 这个参数用于调节系统同时发起的tcp链接数,在高并发的请求中,默认的值可能会致使连接超时或者重传,所以,须要结合并发请求数来调节此值。  net.core.netdev_max_backlog选项表示当每一个网络接口接收数据包的速率比内核处理这些包的速率快时,容许发送到队列的数据包的最大数目。  net.ipv4.tcp_max_orphans选项用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。若是超过这个数字,孤立链接将当即被复位并打印出警告信息。这个限制只是为了防止简单的DoS***。不能过度依靠这个限制甚至人为减少这个值,更多的状况是增长这个值。  net.ipv4.tcp_max_syn_backlog选项用于记录那些还没有收到客户端确认信息的链接请求的最大值。对于有128MB内存的系统而言,此参数的默认值是1024,对小内存的系统则是128。  net.ipv4.tcp_synack_retries参数的值决定了内核放弃链接以前发送SYN+ACK包的数量。  net.ipv4.tcp_syn_retries选项表示在内核放弃创建链接以前发送SYN包的数量。  net.ipv4.tcp_fin_timeout选项决定了套接字保持在FIN-WAIT-2状态的时间。默认值是60秒。正确设置这个值很是重要,有时候即便一个负载很小的Web服务器,也会出现由于大量的死套接字而产生内存溢出的风险。  net.ipv4.tcp_keepalive_time选项表示当keepalive启用的时候,TCP发送keepalive消息的频度。默认值是2(单位是小时)。  

相关文章
相关标签/搜索