Nginx性能优化的方法(nginx性能指标)

Nginx性能优化的方法(nginx性能指标)

浏览次数:
信息来源: 用户投稿
更新日期: 2026-01-07 09:06:58
文章简介

Linux系统参数优化下文中提到的一些配置,需要较新的Linux(2.6以上)内核才能够支持,笔者使用的CentOS7.4,内核版本3.10,如果不满足需要的话,最好进行相应的升级,毕竟打补丁是

2025阿里云双十一服务器活动

Linux系统参数优化

下文中提到的一些配置,需要较新的Linux(2.6以上)内核才能够支持,笔者使用的CentOS7.4,内核版本3.10,如果不满足需要的话,最好进行相应的升级,毕竟打补丁是件费力不讨好的事情。对于系统层面的调优,通常我们修改文件描述符限制、缓冲区队列长度以及临时端口数量就可以了。

由于每个TCP连接都要占用一个文件描述符,一旦文件描述符耗尽,新的连接到来就会返回“Toomanyopenfiles”这样的错误,为了提高性能,我们需要对其进行修改:1.系统层级的限制编辑文件/etc/sysctl.conf,添加如下内容:

fs.nr_open=10000000

用户层级的限制编辑文件/etc/security/limits.conf,添加以下内容:

*softnofile1000000

我们需要确保用户层级限制低于系统层级限制,否则会导致无法通过SSH登录。修改完毕执行如下命令:

$sysctl-p

可以通过执行命令ulimit-a查看是否修改成功。

编辑文件/etc/sysctl.conf,添加如下内容:

Thelengthofthetcpacceptqueuenet.core.somaxconn=65535

其中tcp_max_syn_backlog用于指定半连接SYN队列长度,当新连接到来时,系统会检测半连接SYN队列,如果队列已满,则无法处理该SYN请求,并在/proc/net/netstat中的ListenOverflows和ListenDrops中增加统计计数somaxconn用于指定全连接ACCEPT队列长度,当该队列满了以后,客户端发送的ACK包将无法被正确处理,并返回错误”connectionresetbypeer”Nginx则会记录一条error日志”noliveupstreamswhileconnectingtoupstreams”如果出现以上错误,我们需要考虑增大这两项的配置。

由于Nginx用作代理,每个到上游Web服务的TCP连接都要占用一个临时端口,因此我们需要修改ip_local_port_range参数修改/etc/sysctl.conf文件,添加如下内容:

net.ipv4.ip_local_port_range=102465535

Nginx性能优化的方法,nginx性能指标

upstreamBACKEND{

proxy_passhttp://BACKEND;

proxy_set_headerConnection"";

}

其中keepalive既非timeout,也不是连接池数量,官方解释如下:

Theconnectionsparametersetsthemaximumnumberofidlekeepaliveconnectionstoupstreamserversthatarepreservedinthecacheofeachworkerprocess.Whenthisnumberisexceeded,theleastrecentlyusedconnectionsareclosed.

可以看出它的意思是“最大空闲长连接数量”,超出这个数量的空闲长连接将被回收,当请求数量稳定而平滑时,空闲长连接数量将会非常小(接近于0),而现实中请求数量是不可能一直平滑而稳定的,当请求数量有波动时,空闲长连接数量也随之波动:

  1. 当空闲长连接数量大于配置值时,将会导致大于配置值的那部分长连接被回收;

  2. 当长连接不够用时,将会重新建立新的长连接。

如果该值过小,连接池会经常进行回收、分配和再回收操作。为了避免这种情况出现,可以根据实际情况适当调整这个值,在我们实际情况中,目标QPS为6000,Web服务响应时间约为200ms,因此需要约1200个长连接,而keepalive值取长连接数量的10%~30%就可以了,这里我们取300,如果不想计算,直接设为1000也是可行的。

记录日志的I/O开销比较高,好在Nginx支持日志缓存,我们可以利用这个功能,降低写日志文件的频率,从而提高性能。结合使用buffer和flush两个参数可以控制缓存行为

access_log/var/logs/nginx-access.logbuffer=64kgzipflush=1m

其中buffer制定了缓存大小,当缓冲区达到buffer所指定的大小时,Nginx就会将缓存起来的日志写到文件中;flush指定了缓存超时时间,当flush指定的时间到达时,也会触发缓存日志写入文件操作。

Nginx配置中同样有相应的配置项:worker_rlimit_nofile,理论上这个值应该设置为/etc/security/limits.conf中的值除以worker_processes,但实际中不可能每个进程均匀分配,所以这里只要设置成和/etc/security/limits.conf一样就可以了

worker_rlimit_nofile1000000;

以上就是Nginx性能优化的方法的详细内容,更多请关注主机测评网其它相关文章!

标签:
大带宽美国服务器租用
« 上一篇
返回列表
下一篇 »

如本文对您有帮助,就请抽根烟吧!