Nginx性能调优

Nginx负载均衡性能测试及瓶颈分析 Nginx性能测试相关的瓶颈分析思路 阅读详情

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

文件描述符限制

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

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

2.用户层级的限制 编辑文件 /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性能调优。

以上就是良许教程网为各位朋友分享的Linux相关知识。

Nginx性能调优策略 Nginx是一个高性能的Web服务器和反向代理服务器,常用于处理高并发的请求。以下是一些常见的Nginx。 阅读详情

相关推荐

Nginx性能调优与深度监控

实时监控统计每个虚拟主机(server 块)的请求量(QPS)、带宽使用、响应时间、连接数 等关键指标。支持按状态码(如 2xx、4xx、5xx)分类统计请求。数据可视化提供内置监控页面(默认路径 /status),通过图表和表格展示实时及历史数据。支持 JSON 格式输出,方便集成到 Prometheus、Grafana 等监控平台。扩展性通过 Lua 脚本扩展自定义监控逻辑(如记录特定 API 的响应时间)。可配置 数据存储策略(如保留最近 1 小时的数据)。报警集成。

2501_91557429的博客 1678

浅谈Nginx性能调优

浅谈Nginx性能调优

Jaemon 575

05-Nginx性能调优

一般情况下并发处理机制有三种:多进程、多线程,与异步机制。Nginx 对于并发的处理同时采用了三种机制。当然,其异步机制使用的是异步非阻塞方式。我们知道Nginx 的进程分为两类:master 进程与 worker 进程。每个 master 进程可以生成多个 worker 进程,所以其是多进程的。每个 worker 进程可以同时处理多个用户请求,每个用户请求会由一个线程来处理,所以其是多线程的。那么,如何解释其“异步非阻塞”并发处理机制呢?

Java架狗师知识框架速查表 6648

四、Nginx 性能调优

一、Nginx 性能调优 二、Nginx 高速缓存 三、Nginx 集群

梦想成真 6372

性能调优初探之nginx

把访问 http://127.0.0.1:8000/demo1 的请求转发到 http://127.0.0.1:8080 把访问 http://127.0.0.1:8000/demo2 的请求转发到 http://127.0.0.1:8081。net.ipv4.tcp_syn_retries = 6 主动建立连接时,发syn的重试次数 net.ipv4.ip_local_port_range = 1024 65000 建立连接时的本地端口可用范围。设置压缩比率,最小为1,处理速度快,传输速度慢;

专注于技术分享的博主 1513

Nginx安全优化与性能调优

目录 Nginx基本安全优化隐藏Nginx软件版本号信息更改源码隐藏Nginx软件名及版本号修改Nginx服务的默认用户 修改参数优化Nginx服务性能优化Nginx服务的worker进程数1.优化NGINX进程对应的配置2.优化Nginx进程个数的策略3.查看Web服务器CPU硬件资源信息4.修改服务器Nginx配置绑定不同的Nginx进程到不同的CPU上Nginx事件处理模型优化调整Nginx单进程允许的客户端最大连接数配置Nginx worker进程最大打开文件数开启高效文件传输模式1.设置参数:

javalingyu的博客 5237

nginx复现问题accept4() failed (24: Too many open files)

请求模拟:使用nginx反向代理一个java后端请求工具:使用ab命令(yum install httpd-tools -y)下载-n 请求数-c 并发数-r 不在接手错误是退出ab命令并发最大在2w,可以提升,我这里没有做处理2w足够复现了。

运维工程师 1772

nginx性能调优

参考:https://zhuanlan.zhihu.com/p/27288422 nginx调优相关的几个指令配置,参考上面的专栏的指令: worker_processes worker_connections Buffers Timeouts Gzip Compression Static File Caching logging 1,woker_processe...

Chappi 2696

nginx性能调优与深度监控

GoAccess 是一个开源实时 Web 日志分析器和交互式査看器,可在 Linux 系统上的 终端中或通过浏览器运行。它为需要动态可视化服务器报告的系统管理员提供快速且有价值的 HTTP 统计信息。GoAccess 解析指定的 Web 日志文件并将数据输出到X终端。特点包括:完全实时:所有面板和指标都定时在终端输出上每200毫秒更新一次,在HTML 输出上每秒更新一次。所需的最少配置:您只需针对访问日志文件运行它,选择日志格式,然后让GoAccess 解析访问日志并向您显示统计信息。

2501_91344113的博客 1521

利用Openlayers4实现地图遮罩效果(二)

之前实现的遮罩效果,在深色背景的底图上,对要突出的区域采用半透明遮罩,以此来突出该区域。但是有时底图颜色偏白,这时候不再适合对要突出的区域采用遮罩,而是要对突出区域之外进行遮罩处理。两种效果的对比入下图: ...

此爱如少年 6394

(Cascade extended state observer)级联ADRC的simulink仿真和程序---送给中国研究学者的精华版

(Cascade extended state observer)级联ADRC的simulink仿真和程序---送给中国研究学者的精华版

weixin_44312889的博客 3777

Nginx 性能调优与深度监控

GoAccess 是一款开源的实时 Web 日志分析工具,支持生成交互式 HTML 报告、命令行报表,能快速分析 Nginx、Apache 等日志,直观展示访问量、访客来源、请求路径等关键指标。Nginx VTS 是一个第三方模块,用于监控虚拟主机(Server Block)的流量状态,提供详细的请求数、响应时间、流量统计等数据,支持 Prometheus 格式导出。

2301_80839375的博客 1361

555定时器呼吸灯电路制作全攻略:从仿真到实物搭建(附避坑指南)

本文详细介绍了使用555定时器制作呼吸灯电路的完整流程,从基础原理到实物搭建,包括电路设计、元件选择、仿真验证、焊接技巧及调试优化。特别提供了避坑指南,帮助电子爱好者快速掌握这一经典DIY项目,实现美观的呼吸灯效果。

weixin_33734785的博客 402
上一篇: 在Shell脚本中声明和使用布尔变量示例
下一篇: gcc和g++的区别
码农在线QY
博客等级 码龄6年 11粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值