nginx新版本Nginx1.20.2性能调优之buffer参数优化

我们经常会碰到nginx 
2022/04/01 13:20:58 [warn] 56080#0: *729482 an upstream response is buffered to a temporary file /usr/local/server/nginx/tmp/fastcgi/5/71/0000029715 while reading upstream, client: 223.104.41.76, server: new.wdmcake.cn, request: "POST /api/category HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-fcgi.sock:", host: "new.wdmcake.cn", referrer: "https://servicewechat.com/wxf511174b6ab138e3/60/page-frame.html"
2022/04/01 13:21:21 [warn] 56080#0: *729713 an upstream response is buffered to a temporary file /usr/local/server/nginx/tmp/fastcgi/6/71/0000029716 while reading upstream, client: 223.104.39.1, server: new.wdmcake.cn, request: "POST /api/category HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-fcgi.sock:", host: "new.wdmcake.cn", referrer: "https://servicewechat.com/wxf511174b6ab138e3/60/page-frame.html"
2022/04/01 13:21:52 [warn] 56080#0: *729910 an upstream response is buffered to a temporary file /usr/local/server/nginx/tmp/fastcgi/7/71/0000029717 while reading upstream, client: 123.117.126.67, server: new.wdmcake.cn, request: "POST /api/category HTTP/1.1", upstream: "fastcgi://unix:/dev/shm/php-fcgi.sock:", host: "new.wdmcake.cn", referrer: "https://servicewechat.com/wxf511174b6ab138e3/60/page-frame.html"

类似这样的错误:

an upstream response is buffered to a temporary file  while reading upstream

出现这样的错误提示就是nginx的内存的buffer不够用了,需要进一步的优化,我们先来了解一下nginx的buffer机制

 

对于来自 FastCGI Server 的 Response,Nginx 将其缓冲到内存中,然后依次发送到客户端浏览器。缓冲区的大小由 fastcgi_buffers 和 fastcgi_buffer_size 两个值控制

fastcgi_buffers 控制 nginx 最多创建 8 个大小为 4K 的缓冲区,而 fastcgi_buffer_size 则是处理 Response 时第一个缓冲区的大小,不包含在前者中。所以总计能创建的最大内存缓冲区大小是 8*4K+4K = 36k。而这些缓冲区是根据实际的 Response 大小动态生成的,并不是一次性创建的。比如一个 8K 的页面,Nginx 会创建 2*4K 共 2 个 buffers。

当 Response 小于等于 36k 时,所有数据当然全部在内存中处理。如果 Response 大于 36k 呢?fastcgi_temp 的作用就在于此。多出来的数据会被临时写入到文件中,放在这个目录下面。

Buffer Size 优化

buffer的大小是你需要调优最重要参数。如果buffer size太小就会到导致nginx使用临时文件存储response,这会引起磁盘读写IO,流量越大问题越明显。

client_body_buffer_size 处理客户端请求体buffer大小。用来处理POST提交数据,上传文件等。client_body_buffer_size 需要足够大以容纳如果需要上传POST数据。

fastcgi_buffers,proxy_buffers 处理后端响应。如果这个buffer不够大,同样会引起磁盘都系IO。需要注意的是它们有一个上限值,这个上限值受 fastcgi_max_temp_file_size 、 proxy_max_temp_file_size控制。

FastCGI缓冲设置主要参数

fastcgi_buffers 4 64k

这个参数指定了从FastCGI进程到来的应答,本地将用多少和多大的缓冲区读取,假设一个PHP或JAVA脚本所产生页面大小为256kb,那么会为其分配4个64kb的缓冲来缓存;若页面大于256kb,那么大于256kb的部分会缓存到fastcgi_temp指定路径中,这并非是个好办法,内存数据处理快于硬盘,一般该值应该为站点中PHP或JAVA脚本所产生页面大小中间值,如果站点大部分脚本所产生的页面大小为256kb,那么可把值设置为16 16k,4 64k等。

fastcgi_buffer_size=64k

读取fastcgi应答第一部分需要多大缓冲区,该值表示使用1个64kb的缓冲区读取应答第一部分(应答头),可以设置为fastcgi_buffers选项缓冲区大小。

fastcgi_connect_timeout=300

连接到后端fastcgi超时时间,单位秒,下同。

fastcgi_send_timeout=300

向fastcgi请求超时时间(这个指定值已经完成两次握手后向fastcgi传送请求的超时时间)

fastcgi_reAd_timeout=300

接收fastcgi应答超时时间,同理也是2次握手后

理解了nginx buffer机制后根据自已的服务的响应的包大小高整buffer参数
我的服务调整成:
 

fastcgi_buffers      8 4K;
fastcgi_buffer_size  4K;

后,上面的错误信息就很少了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Nginx 性能的方法有很多,主要包括以下几点: 1. 减少 worker_processes 的数量:默认为 CPU 核数,可根据实际情况减少。 2. 增加 worker_connections 的值:默认为 1024,可根据实际情况增加。 3. 使用 sendfile on 或 offload:sendfile on 表示允许 Nginx 使用 sendfile 系统用,offload 则表示使用硬件加速。 4. 配置缓存:使用 proxy_cache 或 fastcgi_cache 可以缓存静态文件,提高访问速度。 5. 合理配置 keepalive_timeout:设置连接保持时间,防止频繁建立连接。 6. 日志优化:使用 log_subrequest on 或 off,来关闭子请求日志记录。 7. 使用性能监控工具:例如 nginx-module-vts ,这样可以更直观的查看Nginx的运行状态. 8. 在硬件上进行,例如内存、磁盘、网络等。 这只是一些常用的性能方法,具体情况需要根据实际情况进行整。 ### 回答2: 对于Nginx性能,可以从以下几个方面进行考虑: 1. 整worker_processes参数:这个参数指定Nginx使用的CPU核心数,可以根据服务器的配置情况设置合适的值。通常情况下,可以将其设置为与服务器的CPU核心数相同。 2. 整worker_connections参数:该参数指定每个worker进程的最大连接数。对于高并发的情况,可以适当增加该值。但是需要根据服务器的内存等资源来进行合理的设置。 3. 启用事件驱动模型:在Nginx的配置文件中,可以启用epoll、kqueue等事件驱动模型,提高性能和并发能力。 4. 启用缓存:Nginx内置了缓存模块,可以将常被请求的静态资源缓存在内存中,从而减轻后端服务器的负担,提高响应速度。 5. buffer参数:可以整proxy_buffer_size和proxy_buffers参数优化web服务器的传输速度和内存消耗。 6. 启用Gzip压缩:启用Nginx的gzip模块,可以对传输的数据进行压缩,减小文件的体积,提高传输速度。 7. 使用反向代理:将动态请求转发给后端应用服务器,可以提高静态资源的响应速度。 8. 开启HTTP Keep-Alive:通过开启Keep-Alive,可以在同一个TCP连接上处理多个HTTP请求,减少TCP三次握手和四次挥手的消耗,提高性能。 9. 避免不必要的重定向:合理使用rewrite规则,避免多次重定向,减少性能损耗。 10. 定期检查和优化配置文件:定期检查Nginx的配置文件,避免不必要的配置错误,同时可以根据实际情况进行优化整。 通过以上的优化方法,可以有效提高Nginx性能和并发能力,提供更快的服务响应速度。 ### 回答3: Nginx是一款高性能的Web服务器和反向代理服务器,可以通过一些方法进一步提高其性能。 首先,可以通过Nginx的工作进程数来提高性能。可以根据系统的CPU核心数和负载情况,在Nginx配置文件中设置worker_processes参数,使其与CPU核心数匹配,以充分利用系统资源。 其次,使用适当的缓存机制可以减轻服务器负担。通过Nginx的proxy_cache模块,可以将经常访问的静态内容缓存起来,减少后续请求的响应时间。 另外,合理配置Nginx的连接池和缓冲区大小也可以改善性能。可以通过整worker_connections参数来控制连接池的大小,使其适应系统的负载。同时,通过整proxy_buffer_size和proxy_buffers参数,可以优化反向代理性能。 此外,采用压缩传输和启用Keep-Alive功能也能提升性能。启用Gzip压缩可以减小数据传输量,加快网络传输速度。通过启用Keep-Alive功能,允许多个请求复用同一个TCP连接,减少连接建立和断开的开销。 另外,合理配置Nginx的日志记录也很重要。将需要的日志级别设为合理的水平,避免记录过多无用的信息,节省磁盘空间和IO资源。 最后,定期监测和Nginx性能是必要的。可以通过工具如Nginx Amplify和掌握一些基本的性能监控指标来了解系统的负载和瓶颈,进行及时的整和优化。 总而言之,通过合理的配置,使用缓存机制,优化连接池和缓冲区大小,启用压缩传输和Keep-Alive功能,以及有效地记录和监测性能,可以使Nginx发挥出更好的性能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北漂燕郊杨哥

您的支持是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值