加入收藏 | 设为首页 | 会员中心 | 我要投稿 宜春站长网 (https://www.0795zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

大流量、高负载场景 Nginx+Linux 性能调优

发布时间:2019-05-21 02:34:16 所属栏目:Windows 来源:Maslino
导读:Nginx以高性能负载均衡、缓存和web服务器出名,支撑着世界上繁忙网站中的40%。大多数使用场景下,Nginx和Linux系统的默认配置表现较好,但是仍有必要做一些调优以期达到最佳性能。 这篇文章讨论当调优系统时需要考虑的一些Nginx和Linux配置。这些配置有很
副标题[/!--empirenews.page--]

Nginx以高性能负载均衡、缓存和web服务器出名,支撑着世界上繁忙网站中的40%。大多数使用场景下,Nginx和Linux系统的默认配置表现较好,但是仍有必要做一些调优以期达到最佳性能。

这篇文章讨论当调优系统时需要考虑的一些Nginx和Linux配置。这些配置有很多,但是在本文里我们只涉及适合大多数用户的配置。那些没有涉及到的配置,只有那些对Nginx和Linux有深入理解的人,或者Nginx专家服务团队推荐,才会考虑到。

Nginx专家服务,已经和世界上一些繁忙网站合作来调优Nginx以达到最大限度的性能,并且可以对任何需要充分发挥系统能力的客户提供支持。

大流量、高负载场景 Nginx+Linux 性能调优

简介

这里假定读者对Nginx架构和配置概念有个基本了解。本文不会重复Nginx文档的内容,而是概述各种配置选项并提供相关文档链接。

调优时,有一条较好的准则是,一次只改一个配置项,如果改后没有性能上的提升,就退回为原先的值。

我们先讨论Linux调优,因为有些值会影响在Nginx配置中可以用的值。

Linux配置

现代Linux内核(2.6+)能够很好的调节各种配置,有些配置您可能想更改。如果操作系统配置太低,那么会在内核日志中看到错误信息,因此需要调节这些配置。Linux配置项很多,本文只提及那些在普通工作负载下最可能需要调优的配置项。如果需要这些配置的详细信息,请参考Linux文档。

Backlog队列

以下设置与连接及其如何排队直接相关。如果传入的连接率很高而性能水平参差不齐,比如一些连接似乎被暂停了,那么更改这些配置可能会有用。

  • net.core.somaxconn 该项设置等待被Nginx接受的连接的排队大小。由于Nginx接受连接速度非常快,这个值通常不需要非常大,但是默认值是非常低的,所以如果你有一个高流量网站,增加这个值是个好主意。如果设置过低,那么你能在内核日志中看到错误信息,这时你应该增加这个值直到没有错误信息。注意:如果你将其设置为大于512的值,你应该同时用listen指令的backlog参数匹配这个值来更改Nginx的配置。
  • net.core.netdev_max_backlog 该项设置在交由CPU处理之前网卡缓冲数据包的速率。对于拥有高带宽的机器,这个值可能需要增加。查看网卡文档寻求相关建议,或者检查内核日志相关错误信息。

文件描述符

文件描述符是一种操作系统资源,用来处理诸如连接和打开文件的事情。对每一个连接,Nginx可以用上多达两个文件描述符。例如,如果Nginx用作代理,则其中一个用于客户端连接,另一个用于连接到被代理的服务器。如果使用了HTTP keepalive,则连接描述符的使用会少得多。对于有大量连接的系统,如下设置可能需要进行调整:

  • sys.fs.file_max 这是系统范围内的文件描述符限制。
  • nofile 这是用户级别的文件描述符限制,在/etc/security/limits.conf文件中配置

临时端口

当Nginx被当作代理使用时,每一个到upstream服务器的连接都使用一个临时端口。

  • net.ipv4.ip_local_port_range 这个用来指定可以使用的起止端口号。如果你看到端口耗尽,你可以增加这个范围。常见的设置为1024到65000。
  • net.ipv4.tcp_fin_timeout 这个用于指定一个不再被使用的端口多久之后可以被另一连接再次使用。通常,这个值默认为60秒,但是可以安全地减少到30甚至15秒。

Nginx配置

下面是一些可能影响性能的Nginx指令。如前所述,我们仅讨论那些推荐大多数用户调整的指令。这里未提及到的任何指令,如果没有Nginx团队的指导,不推荐更改。

工作进程

Nginx可以运行多个工作进程,每个都能处理大量连接。你可以用如下指令控制工作进程个数以及连接如何被处理:

  • worker_processes 这个控制Nginx运行的工作进程个数。大多数情况下,一个CPU核心跑一个工作进程能够工作得很好。可以将该指令设为auto来达到与CPU核心数匹配的工作进程数。有时候,可以增加这个值,比如工作进程需要处理大量磁盘IO操作的时候。这个值默认为1。
  • worker_connections 这个表示每个工作进程同时能够处理的最大连接数。默认值是512,但是大多数系统能处理更大的值。这个值该设为多少取决于服务器硬件配置以及流量的特性,可以通过测试来发现。

Keepalives

持久连接可以减少打开和关闭连接所需要的CPU和网络开销,因而对性能有重大影响。Nginx终止所有客户端连接,并具有到upstream服务器的单独连接。Nginx支持客户端和upstream服务器的持久连接。如下指令涉及客户端持久连接:

  • keepalive_requests 这表示客户端能在单个持久连接上发送多少请求。默认值是100,可以设置成更高的值,这在负载生成器从单个客户端发送大量请求的测试场景中非常有用。
  • keepalive_timeout 表示一个空闲持久连接保持打开状态多长时间。

如下指令涉及upstream持久连接:

  • keepalive 这个指定每个工作进程连接到upstream服务器的空闲持久连接数量。这个指令没有默认值。

为了启用到upstream的持久连接,需要增加如下指令:

  1. proxy_http_version 1.1;  
  2. proxy_set_header Connection ""; 

Access日志

记录每个请求需要花费CPU和IO周期,减少这种影响的一种方法是启用access日志缓冲。这将导致Nginx缓冲一系列日志条目,然后一次性写入文件而不是单个单个写入。

通过指定access_log指令的"buffer=size"选项可以打开access日志缓冲,该设置指定要使用的缓冲区的大小。你还可以使用"flush=time"选项告诉Nginx多长时间后把缓冲区中的条目写入文件。

定义了这两个选项后,当缓冲区放不下下一条日志,或者缓冲区中的条目超过了flush参数指定的时间,Nginx会将缓冲区中的条目写入日志文件。当工作进程重新打开日志文件或者关闭时,缓冲区中的条目也会被写入文件。也可以完全禁用access日志记录。

Sendfile

(编辑:宜春站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读