iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何优化Nginx的性能
  • 761
分享到

如何优化Nginx的性能

2023-06-15 17:06:28 761人浏览 八月长安
摘要

今天就跟大家聊聊有关如何优化Nginx的性能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。文件描述符限制由于每个tcp连接都要占用一个文件描述符,一旦文件描述符耗尽,新的连接到来就会

今天就跟大家聊聊有关如何优化Nginx的性能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

文件描述符限制

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

1.  `fs.file-max =10000000`  2.  `fs.nr_open =10000000`

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

1.  `*      hard   nofile      1000000`  2.  `*      soft   nofile      1000000`

这里我们只要保证用户层级限制不大于系统层级限制就可以了,否则可能会出现无法通过ssh登录系统的问题。修改完毕执行如下命令:

1.  `$ sysctl -p`

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

TCP连接队列长度

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

1.  `# The length of the syn quene`  2.  `net.ipv4.tcp_max_syn_backlog =65535`  3.  `# The length of the tcp accept queue`  4.  `net.core.somaxconn =65535`

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

临时端口

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

1.  `net.ipv4.ip_local_port_range =102465535`  2.  `net.ipv4.ip_local_reserved_ports =8080,8081,9000-9010`

其中,参数 ip_local_reserved_ports用于指定保留端口,这是为了防止服务端口被占用而无法启动。

Nginx参数优化

Nginx参数优化主要围绕 nginx.conf这个配置文件展开,下文不再赘述。

工作进程

Nginx性能强大的一个重要原因在于它采用多进程非阻塞I/O模型,因此我们要妥善利用这一点:

  •  worker_processes  默认的Nginx只有一个master进程一个worker进程,我们需要对其进行修改,可以设置为指定的个数,也可以设置为 auto,即系统的CPU核数。更多的worker数量将导致进程间竞争cpu资源,从而带来不必要的上下文切换。因此这里我们将它设置为cpu的核数即可:    worker_processes   auto

  •  worker_connections 每个worker可以处理的并发连接数,默认值512不是很够用,我们适当将它增大:    worker_connections 4096

  •  Nginx支持以下I/O复用方法处理连接:select、 poll、 kqueue、 epoll、 rtsig、 /dev/poll、 eventport。它们分别适用于不同的操作系统,其中 epoll是linux系统上面效率最高的:    use epoll

KeepAlive

为了避免从Nginx到Web服务频繁的建立、断开连接,我们可以启用从Http 1.1开始支持的KeepAlive长连接特性,它可以大幅减少CPU和网络开销,在我们的实战中也是对性能提高最大的一环。keepalive必须和 proxy_http_version与 proxy_set_header结合使用, 参考配置如下:

1.  `upstream BACKEND {`  2.  `    keepalive 300;`  3.  `    server 127.0.0.1:8081;`  4.  `}`  5.  `server {`  6.  `    listen 8080;`  7.  `    location /{`  8.  `        proxy_pass http://BACKEND;`  9.  `        proxy_http_version 1.1;`  10.  `        proxy_set_header Connection"";`  11.  `}`  12.  `}`

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

The connections parameter sets the maximum number of idle keepalive connections to upstream servers that are preserved in the cache of each worker process. When this number is exceeded, the least recently used connections are closed.

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

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

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

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

Access-Log缓存

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

1.  `access_log /var/logs/nginx-access.log buffer=64k gzip flush=1m`

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

文件描述符限制

上一节中已经对Linux系统的文件描述符限制进行了修改,Nginx配置中同样有相应的配置项:worker_rlimit_nofile, 理论上这个值应该设置为 /etc/security/limits.conf 中的值除以 worker_processes, 但实际中不可能每个进程均匀分配,所以这里只要设置成和 /etc/security/limits.conf 一样就可以了

1.  `worker_rlimit_nofile 1000000;`

看完上述内容,你们对如何优化Nginx的性能有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: 如何优化Nginx的性能

本文链接: https://www.lsjlt.com/news/281144.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何优化Nginx的性能
    今天就跟大家聊聊有关如何优化Nginx的性能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。文件描述符限制由于每个TCP连接都要占用一个文件描述符,一旦文件描述符耗尽,新的连接到来就会...
    99+
    2023-06-15
  • Nginx性能优化的方法
    这篇文章主要介绍了Nginx性能优化的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Nginx性能优化的方法文章都会有所收获,下面我们一起来看看吧。Linux系统参数优化下文中提到的一些配置,需要较新的Li...
    99+
    2023-06-27
  • 如何进行Nginx高性能优化配置
    本篇文章为大家展示了如何进行Nginx高性能优化配置,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Nginx是Apache服务不错的替代品。其特点是占有内存少,并发能力强,事实上nginx的并发能力...
    99+
    2023-06-15
  • 浅谈一下Nginx性能优化
    目录Nginx 性能优化1、Nginx运行工作进程数量2、Nginx运行CPU亲和力3、Nginx最大打开文件数4、Nginx事件处理模型5、开启高效传输模式6、连接超时时间7、fa...
    99+
    2023-05-15
    Nginx性能 Nginx性能优化
  • 如何优化Nginx负载均衡的性能与稳定性
    摘要:Nginx作为一款开源的高性能Web服务器和反向代理服务器,其负载均衡功能可以有效地分发请求以提高系统的性能和可靠性。本文将介绍如何优化Nginx负载均衡的性能和稳定性,并提供具体的代码示例。使用upstream模块配置后端服务器Ng...
    99+
    2023-10-21
    Nginx:指代Nginx服务器软件 以提高性能和稳定性。
  • 总结高并发下Nginx性能如何优化
    目录特点优势安装和命令配置文件代理模式和配置反向代理正向代理(forward proxy) :反向代理(reverse proxy)︰透明代理∶动静分离日志管理日志格式日志切割高并发...
    99+
    2022-11-12
  • Nginx性能优化的方法是什么
    今天小编给大家分享一下Nginx性能优化的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Nginx 性能优化1、N...
    99+
    2023-07-06
  • 优化Nginx负载均衡的网络性能
    引言:Nginx已经成为一个非常流行的开源反向代理服务器,它在处理高并发请求时具有非常出色的性能表现。为了进一步优化Nginx负载均衡的网络性能,本文将介绍一些具体的代码示例和配置技巧。一、配置keepalive在Nginx配置文件中加入以...
    99+
    2023-10-21
    nginx 负载均衡 优化网络性能
  • 高并发下Nginx性能怎么优化
    本篇内容介绍了“高并发下Nginx性能怎么优化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Nginx同Apache一样都是一种WEB服务器...
    99+
    2023-06-25
  • 05-Nginx性能调优
    目录 Nginx 的并发处理机制 全局模块下的调优 worker_processes 2 worker_cpu_affinity 01 10 worker_rlimit_nofile 65535 events 模块下的调优 w...
    99+
    2023-09-17
    nginx 服务器 运维
  • Nginx性能优化之Gzip压缩的设置方法
    本篇内容主要讲解“Nginx性能优化之Gzip压缩的设置方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Nginx性能优化之Gzip压缩的设置方法”吧!Nginx开启Gzip压缩功能,&nbs...
    99+
    2023-06-29
  • android的性能如何优化
    优化Android性能可以通过以下几个方面来实现:1. 减少内存占用:避免创建过多的对象,使用缓存技术来减少内存占用,及时释放不再使...
    99+
    2023-08-08
    android
  • C#的性能如何优化
    这篇文章主要讲解了“C#的性能如何优化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#的性能如何优化”吧!减少重复代码这是最基本的优化方案,尽可能减少那些重复做的事,让他们只做一次,比较常...
    99+
    2023-06-17
  • Nginx如何优化调整
    这篇文章将为大家详细讲解有关Nginx如何优化调整,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、网络层面带宽带宽对Nginx性能的影响是最为直接的,就算如何独享10M的带宽也肯定不如100M带宽下Ng...
    99+
    2023-06-04
  • 如何优化Nginx和Node.js
    本篇内容介绍了“如何优化Nginx和Node.js”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!网络调优如果不先对nginx和node.js...
    99+
    2023-07-04
  • 如何优化MYSQL性能
    本篇文章给大家分享的是有关如何优化MYSQL性能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  1. MySQL性能优化简介  在Web应用...
    99+
    2022-10-18
  • mpvue如何优化性能
    这篇文章主要介绍了mpvue如何优化性能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先上个优化前后的图:可以看到打包后的代码量从813KB...
    99+
    2022-10-19
  • MySQL如何优化性能
    本文小编为大家详细介绍“MySQL如何优化性能”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL如何优化性能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。- MySQL服...
    99+
    2022-10-19
  • 如何优化Hibernate性能
    这篇文章主要介绍“如何优化Hibernate性能”,在日常操作中,相信很多人在如何优化Hibernate性能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何优化Hibernate性能”的疑惑有所帮助!接下来...
    99+
    2023-06-17
  • win101909性能如何优化
    这篇文章主要介绍了win101909性能如何优化的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇win101909性能如何优化文章都会有所收获,下面我们一起来看看吧。一、加速开机速度 【Win】+【R】打开【运行...
    99+
    2023-07-01
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作