Nginx性能优化

来源:互联网 发布:mac剪辑电影软件 编辑:程序博客网 时间:2024/06/09 19:15

编译过程优化

在编译Nginx时默认会开启debug模式,这样会插入许多追踪和ASSERT信息到文件中,导致Nginx的大小会达到数兆字节。

所以在编译前取消debug模式,这样编译后只有几百千字节,取消debug模式可以如下操作:

vim /usr/local/src/nginx-1.8.0/auto/cc/gcc    # debug    CFLAGS="$CFLAGS -g"

注释上面的语句即可取消debug模式,注意这一步需要在编译前操作。


指定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类型:

cat /proc/cpuinfo | grep "model name"

利用TCMalloc优化Nginx性能

TCMalloc全称为Thread-Caching Malloc,是谷歌开发的google-perftools中的成员。

与标准glibc库的Malloc相比,TCMalloc在内存分配效率上和速度上要高很多,并且降低了系统负载,提高了服务器在高并发下的性能。要安装TCMalloc库,需要安装libunwind(32位系统不用安装)和google-perftools。

安装libunwind

下载地址:http://ftp.yzu.edu.tw/nongnu/libunwind/,这里使用1.1版本。

tar zxf libunwind-1.1.tar.gzcd /usr/local/src/libunwind-1.1CFLAGS=-fPIC ./configuremake CFLAGS=-fPICmake CFLAGS=-fPIC install

安装google-perftools

下载地址:http://google-perftools.googlecode.com,这里使用的是1.8.2版本。

tar zxf google-perftools-1.8.2.tar.gzcd /usr/local/src/google-perftools-1.8.2./configuremake & make installecho "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.confldconfig

重新编译Nginx

./configure --with-google_perftools_module --with-http_stub_status_module --with-http_gzip_static_module  --prefix=/usr/local/nginxmake & make install

注意,安装期间可能出现的问题:
libcrypto.so.6: cannot open share —> 执行yum install -y openssl*

the Google perftools module requires the Google perftools library. —> 把auto/lib/google-perftools/conf中的 /usr/local 全部替换成google-perftools的路径

为google-perftools添加线程目录

mkdir /tmp/tcmallocchmod 0777 /tmp/tcmalloc

修改Nginx主配置文件

在pid这行下面添加如下代码:

google_perftools_profiles /tmp/tcmalloc;

重启Nginx

kill -HUP `cat nginx.pid`

验证运行状态

lsof -n| grep tcmalloc

其结果会显示对应Nginx开启线程数的记录,文件后面的数值为Nginx的pid。


Nginx内核优化

在Linux系统中,对针对Nginx应用而进行的内核参数优化,下面是一些例子:

net.ipv4.tcp_max_tw_buckets = 6000

net.ipv4.ip_local_port_range = 1024 65000

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_syncookies = 1

net.core.somaxconn = 262144

net.core.netdev_max_backlog = 262144

net.ipv4.tcp_max_orphans = 262144

net.ipv4.tcp_max_syn_backlog = 262144

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_fin_timeout = 1

net.ipv4.tcp_keeplive_time = 30

将上面的内核参数加入/etc/sysctl.conf中,然后执行:

/sbin/sysctl -p

使其生效。

    net.ipv4.tcp_max_tw_buckets:设定timewait数量,默认为180000;    net.ipv4.ip_local_port_range:设定允许系统打开的端口范围;    net.ipv4.tcp_tw_recycle:设置启用timewait快速回收;    net.ipv4.tcp_tw_reuse:设置开启重用,允许将time-wait socket重新用于新的TCP连接;    net.ipv4.tcp_syncookies:开启syn cookies,当出现syn等待队列溢出时启用cookies进行处理;    net.core.somaxconn:调节系统同时发起的tcp连接数,默认128,在高并发请求中,默认值可能会导致连接超时或重传,因此要结合并发数调节;    net.core.netdev_max_backlog:当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列数据包的最大数目;    net.ipv4.tcp_max_orphans:设定系统中最多有多少个tcp套接字不被关联到任何一个用户文件句柄上。若超过这个数字,孤立连接将复位并打印警告信息。只是防止简单的Dos攻击,更多情况下应该增加这个值;    net.ipv4.tcp_max_syn_backlog:记录那些尚未收到客户端确认信息的连接请求的最大值。    net.ipv4.tcp_synack_retries:决定内核放弃连接之前发送syn+ack包的数量;    net.ipv4.tcp_syn_retries:决定内核放弃连接之前发送syn包的数量;    net.ipv4.tcp_fin_timeout:决定套接字保持在fin-wait-2状态的时间,默认60s;    net.ipv4.tcp_keeplive_time:表示当keepalive启用时,tcp发送keeplive消息的频率,默认2(单位小时);
原创粉丝点击