相关阅读:

厉害了Word哥!阿里巴巴73款开源产品最全总结全景图

来源: 独自等待_天涯

简介

本文假设你已经对 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,但多数系统有充足的资源可以支撑更多的连接。合适的设置可以根据服务器的大小和流量的性质决定,可以通过测试修改。

长连接

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

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

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

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

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

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

proxy_http_version 1.1;

proxy_set_header Connection "";

访问日志

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内容缓存。

-END-

欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群

Nginx 性能调优相关推荐

  1. Nginx性能调优,解决C10K问题

    公司的技术总监最近出了一道架构方面的问题让我们同组的开发人员设计,题目是这样的:有个签到功能,需要记录每个⽤户每年每⼀天的签到情况.假设⽤户量在千万,甚⾄亿级,该如何设计. 思考这个问题后,我给出的设 ...

  2. 浅谈Nginx性能调优

    女主宣言 Web服务性能调优是一项系统工程,涵盖许多方面,其中某一环节做的好并不能够保证整体性能好:但是如果某个环节做的不好,那么整体性能必然不会好. 可以调优的配置有很多,绝大多数情况下我们不需要追 ...

  3. 【网站架构】Nginx负载均衡宕机怎么办?Nginx性能调优、集群、高可用方案

    ​ 大家好,欢迎来到停止重构的频道. 本期,我们讨论Nginx的性能调优. Nginx一般是作为网站系统的反向代理或负载均衡,但这里有一个问题,负载均衡可以绑定多个后端服务器. 一个后端服务器宕机后, ...

  4. Nginx 性能调优实战

    来自:Linux社区 1.Nginx运行工作进程数量 Nginx运行工作进程个数一般设置CPU的核心或者核心数x2.如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpui ...

  5. 服务器:浅谈 Nginx 性能调优,太实用了!

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

  6. nginx代理转发_学了三年的性能调优,你还不懂Nginx?怎么跳槽涨薪

    前言 根据 Netcraft 公布的最新的(2019年10月)Web 服务器调查报告,Nginx 的市场份额达到了 32.69%,毫无争议地成为了最流行的 Web 服务器.这主要得益于 Nginx 在 ...

  7. 肝了 15000 字性能调优系列专题(JVM、MySQL、Nginx and Tomcat),看不完先收藏

    前言 性能调优,无疑是个庞大的话题,也是很多项目中非常重要的一环,性能调优难做是众所周知的,毕竟性能调优涵盖的面实在是太多了,在这里我就大概的讲一下企业中最常用的四种调优--JVM 调优.MySQL ...

  8. hive性能调优实战pdf_Nginx 性能调优实战

    来自:Linux社区 1.Nginx运行工作进程数量 Nginx运行工作进程个数一般设置CPU的核心或者核心数x2.如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpui ...

  9. Tomcat 和 JVM 的性能调优总结

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://rrd.me/enKbC Tomcat性能调优 ...

  10. Linux性能调优用这个“必杀技”,稳了!

    " "这个系统好慢.网站又打不开了,太卡了,又没响应了!"相信大家都遇到过这种抱怨,这是应用系统出现了性能问题,需要性能调优. 性能调优,要求对计算机硬件.操作系统和应用 ...

最新文章

  1. 页面生命周期:DOMContentLoaded, load, beforeunload, unload
  2. RE:SB的SDOISB记
  3. android textView调整字体的间距和行间距
  4. jquery对json 键值对或数组的增加、删除、遍历操作
  5. 飞信SDK内容【转载】
  6. Aspose转PDF时乱码问题的解决
  7. STM32F103移植mpu9250
  8. 随想录(写给8-10年工作经验的同学)
  9. 可视化数据展示工具ChatSQL
  10. 2020-11-30 04_机器视觉中的特征提取与描述
  11. matlab 流水灯,Matlab生成stm32代码
  12. jeecg框架解决跨域问题
  13. 计算机网络课设-小型校园网,计算机网络课设 小型校园网.doc
  14. 信号分析与处理(1)
  15. VNC登陆灰屏 - fatal IO error 11 (Resource temporarily unavailable) on X server
  16. input maxlength 属性不起作用
  17. 内存(DDR/DDR2/DDR3/DDR4)的速度等级和时钟频率———个人笔记
  18. 数电常见74系列器件及其功能总结(不要再混乱啦,值得收藏)
  19. php riak,PHP-Riak:快速获取多个项目
  20. 面试问题——英语26 改善环境 愿望

热门文章

  1. ubuntu 安装php 扩展和查看扩展包
  2. AngularJs依赖注入的研究
  3. poj 1679(次小生成树)
  4. 如何用编程方式实现创建一个页面并替换掉站点首页
  5. poj 匈牙利二分匹配 1274 The Perfect Stall
  6. 2287 poj 田忌赛马,贪心
  7. inDesign教程,如何创建风格化的书籍封面?
  8. 如何在 iPhone 和 iPad 上关闭 Spotlight 建议?
  9. Mac 空间不足,4 招帮你释放空间
  10. 系统升级时,数据库脚本执行注意事项,血的教训