当前位置:首页 > 短网址资讯 > 正文内容

Nginx 性能优化,抵抗高并发

www.ft12.com7年前 (2017-07-21)短网址资讯4023

NGINX以高性能的负载均衡器,缓存,和web服务器闻名,驱动了全球超过 40% 最繁忙的网站。在大多数场景下,默认的 NGINX 和 Linux 设置可以很好的工作,但要达到最佳性能,有些时候必须做些调整。本文将讨论当调优系统时要考虑的一些NGINX和Linux设置。


有太多可以调优的设置,但本文只涵盖一小部分设置,这些设置对大多数使用者有优化的好处。本文不包括那些设置,那些需要必须深入理解 NGINX 和 Linux,或者需要 Nginx 支持团队或专业服务团队指导才能做的设置。专业服务团队已经和很多全球热门网站共事,调优Nginx 以达到最高性能,他们可以与你一起共事,充分利用NGINX或NGINX部署。


简介


本文假设你已经对 NGINX 架构和配置的概念有一个基本的理解,本文不会重复 NGINX 文档,但会提供各种选项的概述和相关文档的短链接。


调优的时候要遵循的一个准则:一次只改一个设置,如果对性能无有效提升,就改回默认值。


我们先从讨论Linux调优开始,因为一些操作系统配置的设置决定了如何优化Nginx的配置。


调优Linux 的配置


Linux 内核(2.6以上)的设置已经适用于大多数场合,不过对一些设置的调整,会有更大的收益。如果系统配置太低,检查错误信息的内核日志则会提示建议升级。在这里我们只涉及最有可能在常规工作负载下调优很有收益的配置。调整配置的更多细节,请参考Linux文档。


缓冲区队列


下面的设置与连接及其如何排队相关。如果传入连接速率很高,导致性能参次不齐(例如一些连接似乎停滞了),改变这些配置会有效。


  • net.core.somaxconn:排队等待连接的最大数目,由NGINX可接受的数目决定。默认值通常很低,但可以接受,因为NGINX 接收连接非常快,但如果网站流量大时,就应该增加这个值。内核日志中的错误消息会提醒这个值太小了,把值改大,直到错误提示消失。


    注意: 如果设置这个值大于512,相应地也要改变NGINX listen指令的backlog参数。


  • net.core.netdev_max_backlog : 在提交到CPU前网卡中数据包缓冲的速率,高带宽下提高这个值可提高性能。检查内核日志文件中有关这个设置的错误,根据网卡文档中的建议修改这个值。


文件描述符


文件描述符是操作系统资源,用于表示连接、打开的文件,以及其他信息。NGINX 每个连接可以使用两个文件描述符。例如,如果NGINX充当代理时,通常一个文件描述符表示客户端连接,另一个连接到代理服务器,如果开启了HTTP 保持连接,这个比例会更低(译注:为什么更低呢)。对于有大量连接服务的系统,下面的设置可能需要调整一下:


  • sys.fs.file_max —— 文件描述符系统级别的限制


  • nofile —— 用户级别文件描述符限制,在 /etc/security/limits.conf 文件中修改。


临时端口


当NGINX充当代理时,每个到上游服务器的连接都使用一个短暂或临时端口。可能需要修改这些设置:


  • net.ipv4.ip_local_port_range —— 端口值的起止范围。如果你发现用尽端口号,可以增大端口范围。一般端口号设置是1024到65000。


调优NGINX配置


以下是一些可以影响性能的NGINX指令。如上所述,我们只讨论自己能调整的指令。我们建议你在没有NGINX团队指导下,不要调整别的指令。


工作进程


NGINX可以运行多个工作进程,每个都可处理大量并发连接。可以控制工作进程数,用下面的指令管理它们的连接:


  • worker_processes —— NGINX工作进程数(默认值是1)。在大多数情况下,一个CPU内核运行一个工作进程最好,建议将这个指令设置成自动就可以。有时可能想增大这个值,比如当工作进程需要做大量的磁盘I/O。


  • worker_connections —— 每个工作进程可以处理并发的最大连接数。默认值是512,但多数系统有充足的资源可以支撑更多的连接。合适的设置可以根据服务器的大小和流量的性质决定,可以通过测试修改。对于短网址站,可以尽量的调高worker_connections的数值,使得短网址能够应对高并发。


长连接


长连接对性能有很大的影响,通过减少CPU和网络开销需要开启或关闭连接。NGINX终止所有客户端连接,创建到上游服务器独立的连接。NGINx支持客户端和上游服务器两种长连接。下面是和客户端的长连接相关的指令:


  • keepalive_requests-单个客户端长连接可以请求的数量,默认值是100,但是当使用压力测试工具从一个客户端发送多个请求测试时,这个值设更高些特别有用。


  • keepalive_timeout—空闲长连接保持打开状态的时间。


下面是和上游服务器长连接的相关指令:


  • keepalive –每个工作进程中空闲长连接到上游服务器保持开启的连接数量。没有默认值。


要使用连接到上游服务器的长连接,必须要配置文件中下面的指令。


proxy_http_version 1.1;

proxy_set_header Connection "";


访问日志


记录每个请求会消耗CPU和I/O周期,一种降低这种影响的方式是缓冲访问日志。使用缓冲,而不是每条日志记录都单独执行写操作,NGINX会缓冲一连串的日志记录,使用单个操作把它们一起写到文件中。


要启用访问日志的缓存,就涉及到在access_log指令中buffer=size这个参数。当缓冲区达到size值时,NGINX会把缓冲区的内容写到日志中。让NGINX在指定的一段时间后写缓存,就包含flush=time参数。当两个参数都设置了,当下个日志条目超出缓冲区值或者缓冲区中日志条目存留时间超过设定的时间值,NGINX都会将条目写入日志文件。当工作进程重新打开它的日志文件或退出时,也会记录下来。要完全禁用访问日志记录的功能,将access_log 指令设置成off参数。


Sendfile


操作系统的sendfile()系统调用可以实现从一个文件描述符到另一个文件描述符的数据拷贝,通常实现零拷贝,这能加速TCP数据传输。要让NGINX使用它,在http或server或location环境中包含sendfile指令。NGINX可以不需要切换到用户态,就把缓存或磁盘上的内容写入套接字 ,而且写的速度非常快,消耗更少的CPU周期。注意,尽管使用sendfile()数据拷贝可以绕过用户态,这不适用于常规的NGINX处理改变内容的链和过滤器, 比如gzip。当配置环境下有sendfile指令和激活内容更改过滤器的指令时,NGINX会自动禁用sendfile。


限制


你可以设置多个限制,防止用户消耗太多的资源,避免影响系统性能和用户体验及安全。 以下是相关的指令:


  • limit_conn and limit_conn_zone—NGINX接受客户连接的数量限制,例如单个IP地址的连接。设置这些指令可以防止单个用户打开太多的连接,消耗超出自己的资源。


  • limit_rate–传输到客户端响应速度的限制(每个打开多个连接的客户消耗更多的带宽)。设置这个限制防止系统过载,确保所有客户端更均匀的服务质量。


  • limit_req and limit_req_zone– NGINX处理请求的速度限制,与limit_rate有相同的功能。可以提高安全性,尤其是对登录页面,通过对用户限制请求速率设置一个合理的值,避免太慢的程序覆盖你的应用请求(比如DDoS攻击)。


  • max_conns上游配置块中服务器指令参数。在上游服务器组中单个服务器可接受最大并发数量。使用这个限制防止上游服务器过载。设置值为0(默认值)表示没有限制。


  • queue (NGINX Plus) – 创建一个队列,用来存放在上游服务器中超出他们最大max_cons限制数量的请求。这个指令可以设置队列请求的最大值,还可以选择设置在错误返回之前最大等待时间(默认值是60秒)。如果忽略这个指令,请求不会放入队列。


缓存和压缩可以提高性能


NGINX的一些额外功能可用于提高Web应用的性能,调优的时候web应用不需要关掉,但值得一提,因为它们的影响可能很重要。 它们包括缓存和压缩。


缓存


一个启用NGINX缓存的情景,一组web或者应用服务器负载均衡,可以显著缩短对客户端的响应时间,同时大幅度降低后端服务器的负载。缓存本身就可以作个专题来讲,这里我们就不试图讲它了。参阅NGINX Plus管理手册的NGINX内容缓存。


压缩


所以使用更小的网络带宽。然而尽管压缩数据会消耗CPU资源,但当需要减少网络带宽使用时这样做非常有效。需要注意的是,不能对已压缩的文件再压缩例如JPEG 文件。有关更多的信息,请参阅“NGINX Plus管理指南”中的压缩和解压缩。


了解更多信息,参阅以下:


? Benchmarking NGINX: 4 Ways to Improve Accuracy (whitepaper)

? NGINX documentation at nginx.org

? NGINX and NGINX Plus Feature Matrix

? NGINX Plus Technical Specifications

扫描二维码推送至手机访问。

版权声明:本文由短链接发布,如需转载请注明出处。

本文链接:https://www.ft12.com/article_314.html

分享给朋友:

相关文章

FT12短网址:如何假装看起来很穷?

FT12短网址:如何假装看起来很穷?

如果一个人能无所顾忌坦然说自己穷,那他不是太年轻,就是太幸福。 一般人到中年,无论如何都要想法证明自己,并没有那么穷,因为穷人的自尊心啊,稍微碰一下满地都是血。 前几天我去吃亲戚家喜酒,别人都珠光宝气穿新衣服去,显得光彩...

FT12短网址对科大讯飞2017半年报及人工智能战略的解读

FT12短网址对科大讯飞2017半年报及人工智能战略的解读

[ FT12短网址资讯 ] 2017年8月10日,科大讯飞应邀在合肥举行投资者交流会。董事长刘庆峰、高级副总裁兼董秘江涛、财务总监张少兵对公司半年报及人工智能战略进行了详细解读,并现场回答了投资者及网友十分关注的问题。鄙人一直对科大讯飞这几...

卡夫卡,我最喜欢的《变形记》

卡夫卡,我最喜欢的《变形记》

《变形记》  因为篇幅短又大名鼎鼎,高中就读过,后来又读过多个译本,跟《判决》一样,总给人一种“裤子都脱了你给我看这啊”的感觉。这就结束了?完全get不到它的好,觉得太一般了。真的只是因为它短,打发时间,短篇最大的好处就...

处理好自己与身边人的关系,只要记住三句话

处理好自己与身边人的关系,只要记住三句话

(图文综合自网络)很多时候,人们往往善于忘记别人对自己的好处。而一旦出现无心的冒犯,却总是耿耿于怀,变成了话不投机半句多,甚至老死不相往来。想想我们身边是否有这样的事例?人是社会动物,每个人都不可避免地要与人交往。要想过得愉快,就要处理好自...

公众号新商机:可插入文章链接 ,帮客户打广告

公众号新商机:可插入文章链接 ,帮客户打广告

【FT12短网址资讯】6月6日消息,FT12短网址工作人员获悉,微信团队宣告,今天起,微信大众渠道上线新功用,一切帐号都可在图文消息里刺进大众渠道内任意已群发的文章链接。现在,可经过以下两种方法添加文章:一、直接输入文章连接地址。复制想要刺...

Go语言写的一个短网址服务

Go语言写的一个短网址服务

题图来自https://www.ft12.com/“缩址,又称短址、短网址、网址缩短、缩短网址、URL缩短等,指的是一种互联网上的技术与服务。此服务可以提供一个非常短小的URL以代替原来的可能较长的URL,将长的URL地址缩短。用户访问缩短...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。