Tengine/Nginx/Openresty性能优化及杂谈(未完待续)

时间:16-12-28 来源: 作者: 点击:

【IE-LAB网络实验室】


本文章来自“撒加大神”虚拟先锋论坛的一篇文章,大神一出手果然不一样,小编分享出这么精彩的有用的文章,是不是要给点奖励,那就点个赞吧~

互联网运维工程师

在云计算遮天蔽日的现在,技术行业受到最大的冲击、威胁和变化的就是工程师职业。其中包括网络工程师和运维工程师,为了培养更多的互联网运维人才,解决互联网企业技术人才严重缺失的问题,IE-LAB撒加老师依据多年的运维实战经验,结合目前互联网公司的常用架构和技术研发了,最具实用性的互联网运维课程体系,本套课程分为IOCE互联网运维工程师、 IOCP互联网运维专家、 IOCA互联网架构师三大课程组成。整套体系紧密贴合国内外互联网企业的架构与常用技术,适合初、中级网络工程师,以及运维工程师学习。



谷歌、度娘搜索Nginx优化,能搜索出很多的文章,动不动就几万并发,十万并发,看着好像真是那么回事似的。

从使用Tengine的过程中,对Tengine/Nginx的优化,我个人认为Tengine的优化是脱离不开使用它的环境及部署结构的,单说优化Tengine的意义并不大,况且每家公司的业务各不相同,所以优化不是简单的事情。即便如此,我总结了下,从以下几个方便入手浅谈下Tengine/Nginx的性能优化。本文以Tengine为主,Nginx大部分都适用。

1、网络

带宽

一个需要支持1万并发且平均页面内容在100KB的情况下,就需要大概1G的带宽,如果带宽只有100M,需要支持这样的场景无论如何也是不可能的。更好的带宽可以支持更高的并发

路由

现在的IDC运营商有很多,越小的运营商在路由优化上就不怎么样,例如在对IDC进行测试的时候,大部分运维使用ping来测试机房的网络质量,这种测试其实是点到点的测试,中间大网的情况就测试不到。在使用mtr进行测试的时候,可以看到每一跳的延迟及路由,很多时候会发现浮动路由。这种情况下网络质量一定不好。最好通过mtr对机房提供的IP连续进行一周的测试,路径都比较稳定的时候这样的机房值得选择。

2、硬件

CPU

一般情况下作为Tengine/Nginx的应用,CPU的频率我认为对性能影响还是较小的,但是核心数对于Tengine/Nginx而言确实很有用,更多的核心数外加HT技术,可以让Tengine/Nginx运行更多的worker,从而提升Tengine/Nginx的负载能力

内存

内存的容量直接对Tengine/Nginx可承载的连接数有影响(主要指ESTAB连接)。另外大容量的内存在结合tmpfs进行合理使用的话,可以作为Tengine/Nginx的各种temp目录及各种缓存目录,降低对磁盘IO的消耗

网卡

目前在互联网公司DELL的服务器应该是用的最多的了,而且在用户没有特殊需求的时候,配置的网卡通常是Broadcom BCM57XX的,这种网卡比较便宜所有在处理小包的时候,带宽利用率不高,且流量大的时候会出现大量丢包。在Tengine/Nginx的机器上还是推荐使用Intel X350I QP的网卡,在使用最新的网卡驱动后,可以对网卡做出更多性能控制(X350默认的RSS队列最大为8个)

磁盘

磁盘的IO能力个人认为在硬件里的比重不高,在拿Tengine/Nginx作为专用缓存服务器的时候,使用SATA SSD或者PCIe-SSD卡时可以作为缓存存放的目录路径。一般Intel S3710 800G的大概7000左右,同容量宝存的800G PCIe-SSD大约1.5W。

3、系统

TCP/IP协议栈

CLOSE_WAIT与TIME_WAIT

这两种连接状态是Web服务器中大家最关心的也是最让大家头疼的,虽然很多的博客里说现在服务器内存大,这种连接达到几万、几十万时对内存的消耗不是问题不用去理会,但是在一些场景中可能会对应用造成很大的影响。例如在我们的业务中出现CLOSE-WAIT状态时,是数据库有长事务执行时导致Resin出现了CLOSE-WAIT连接,当这种连接数高于10个时,应用就会打开慢直到应用打不开。所以需要对其进行优化。尽量避免系统中出现过多的这两种连接。

当Tengine/Nginx反向代理后端服务器的时候,Tengine所在的服务器上会出现TIME-WAIT(跟后端服务器断开后产生的状态)以及CLOSE-WAIT(客户端断开后产生的状态)的连接,一般为了减少Tengine/Nginx与后端服务器通信时造成的TIME-WAIT连接,主要需要如下的配置,例如:

配置一

upstream example {
        server 192.168.0.1:8080;
        keepalive 4;
}
server{
        listen 80 backlog=2048;
        server_name ;
        location = /favicon.ico {
                error_page 404 = 200;
                log_not_found off;
                access_log off;
        }
        location = /robots.txt {
                error_page 404 = 200;
                log_not_found off;
                access_log off;
        }
        location / {
                include proxy_opt.conf;
                proxy_http_version 1.1;
                proxy_set_header Connection "";
                proxy_pass      ;
        }
}

配置二

server{
        listen 80 backlog=2048;
        server_name ;
        location = /favicon.ico {
                error_page 404 = 200;
                log_not_found off;
                access_log off;
        }
        location = /robots.txt {
                error_page 404 = 200;
                log_not_found off;
                access_log off;
        }
        location / {
                include proxy_opt.conf;
                proxy_pass      :8080;
        }
}

声明:本文由(Nginx运维与架构)版权所有,禁止转载,文章链接:http://www.nd9p.com/9252.html