干货|Nginx+Linux 性能调优
《干货|Nginx+Linux 性能调优》要点: 本文转载自简书,高效运维社区致力于陪伴您的职业生涯,与您一起愉快的成长.
Nginx以高性能负载均衡、缓存和web服务器出名,支撑着世界上繁忙网站中的40%.大多数使用场景下,Nginx和Linux系统的默认配置表现较好,但是仍有需要做一些调优以期达到最佳性能. 这篇文章讨论当调优系统时需要考虑的一些Nginx和Linux配置.这些配置有很多,但是在本文里我们只涉及适合大多数用户的配置.那些没有涉及到的配置,只有那些对Nginx和Linux有深入理解的人,或者Nginx专家服务团队保举,才会考虑到. Nginx专家服务,已经和世界上一些繁忙网站合作来调优Nginx以达到最大限度的性能,并且可以对任何必要充分发挥系统能力的客户提供支持. 简介这里假定读者对Nginx架构和配置概念有个基本了解.本文不会重复Nginx文档的内容,而是概述各种配置选项并提供相关文档链接. 调优时,有一条较好的准则是,一次只改一个配置项,如果改后没有性能上的提升,就退回为原先的值. 我们先讨论Linux调优,因为有些值会影响在Nginx配置中可以用的值. Linux配置现代Linux内核(2.6+)能够很好的调节各种配置,有些配置您可能想更改.如果操作系统配置太低,那么会在内核日志中看到错误信息,因此必要调节这些配置.Linux配置项很多,本文只提及那些在普通工作负载下最可能必要调优的配置项.如果必要这些配置的详细信息,请参考Linux文档. Backlog队列以下设置与连接及其如何排队直接相关.如果传入的连接率很高而性能水平参差不齐,好比一些连接似乎被暂停了,那么更改这些配置可能会有用.
文件描述符文件描述符是一种操作系统资源,用来处理诸如连接和打开文件的事情.对每一个连接,Nginx可以用上多达两个文件描述符.例如,如果Nginx用作代理,则其中一个用于客户端连接,另一个用于连接到被代理的服务器.如果使用了HTTP keepalive,则连接描述符的使用会少得多.对于有大量连接的系统,如下设置可能必要进行调整:
临时端口当Nginx被当作代理使用时,每一个到upstream服务器的连接都使用一个临时端口.
Nginx配置下面是一些可能影响性能的Nginx指令.如前所述,我们仅讨论那些保举大多数用户调整的指令.这里未提及到的任何指令,如果没有Nginx团队的指导,不保举更改. 工作进程Nginx可以运行多个工作进程,每个都能处置大量连接.你可以用如下指令控制工作进程个数以及连接如何被处置:
Keepalives持久连接可以减少打开和关闭连接所必要的CPU和网络开销,因而对性能有重大影响.Nginx终止所有客户端连接,并具有到upstream服务器的单独连接.Nginx支持客户端和upstream服务器的持久连接.如下指令涉及客户端持久连接:
如下指令涉及upstream持久连接:
为了启用到upstream的持久连接,必要增加如下指令:
Access日志记录每个哀求需要花费CPU和IO周期,减少这种影响的一种方法是启用access日志缓冲.这将导致Nginx缓冲一系列日志条目,然后一次性写入文件而不是单个单个写入. 通过指定access_log指令的"buffer=size"选项可以打开access日志缓冲,该设置指定要使用的缓冲区的大小.你还可以使用"flush=time"选项告诉Nginx多长时间后把缓冲区中的条目写入文件. 定义了这两个选项后,当缓冲区放不下下一条日志,或者缓冲区中的条目跨越了flush参数指定的时间,Nginx会将缓冲区中的条目写入日志文件.当工作进程重新打开日志文件或者关闭时,缓冲区中的条目也会被写入文件.也可以完全禁用access日志记录. SendfileSendfile是一个操作系统特性,可以在Nginx上启用.它通过在内核中从一个文件描述符向另一个文件描述符复制数据,往往能达到零拷贝,因而可以提供更快的TCP数据传输.Nginx可以使用该机制将缓存或者磁盘上的内容写到socket,无需从内核空间到用户空间的上下文切换,因而非常快并且使用较少的CPU开销.由于数据永远不会触及用户空间,所以不可能把需要拜访数据的过滤器插入到处理链中,不能使用任何需要改变内容的Nginx过滤器,比如gzip过滤器.Nginx默认没有启用该机制. 限制Nginx和Nginx Plus允许设置各种限制,用来控制客户端资源消耗,以防影响系统性能以及用户体验和平安.以下是一些相关指令:
其它考虑Nginx还有一些特性可以用来提高web应用的性能.这些特性不常出现在调优讨论中,但是有必要一提,因为它们的影响也可能比拟可观.我们将讨论这些特性中的两个. 缓存对于一个为一组web服务器或者应用服务器作负载均衡的Nginx实例来说,启用缓存可以显著地降低响应时间,同时能显著减轻后端服务器的负载.缓存自己就是一个主题,这里不会讨论.Nginx缓存配置的更多信息请参考:Nginx管理指南 - 缓存 http://t.cn/RKQL8ys. 压缩压缩响应可以大大减小响应的大小,减少带宽占用.不过,这需要CPU资源来处理压缩,所以最好在值得减少带宽占用的情况下使用.需要注意的是,不能对已经压缩的东西(好比jpeg图片)再次启用压缩.Nginx压缩配置的更多信息请参考:Nginx管理指南 - 压缩和解压缩 http://t.cn/RKQLoXA. 近期好文: GOPS 2017 北京站即将到来 点击 阅读原文 了解够多信息 2017.7.28-7.29 点击“阅读原文”,存眷 728·GOPS2017 北京站 《干货|Nginx+Linux 性能调优》是否对您有启发,欢迎查看更多与《干货|Nginx+Linux 性能调优》相关教程,学精学透。编程之家PHP学院为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |