【问题标题】:Nginx bottleneck at 55k Requests per Second but server still has plenty to giveNginx 瓶颈为每秒 55k 请求,但服务器仍有很多可提供的
【发布时间】:2015-07-06 23:56:29
【问题描述】:

所以基本上我已经设置了 Nginx OpenResty 并尝试优化配置以获得最大性能/请求。

服务器可以在不眨眼的情况下清楚地处理很多事情,但似乎在每秒大约 55k 请求之后,Nginx 将不再建立任何连接,如统计数据所示。

我正在使用 Luameter 来获取我的读数,并通过使用云平台向我的服务器施加压力,每秒执行 50k 请求或每秒 100k 请求,从 Nginx 统计数据返回的请求数永远不会超过 50k。

服务器有一个完整的 1gbps 端口,但在受到压力时从不发送超过 330mbps 的输出。它还有一个 SSD 硬盘。

每秒 100k 请求时,Cpu 为 45%。

ulimit 是无限的,ulimit -n 999999

这是我的 nginx 配置的 sn-p:

user  nobody; worker_processes  8; worker_rlimit_nofile 262144; error_log            logs/error.log crit;

events {
worker_connections  100000;
use epoll;
multi_accept on; }

http {

open_file_cache max=200000 inactive=20s; open_file_cache_valid 30s;  
open_file_cache_min_uses 2; open_file_cache_errors on;

考虑到在服务器资源方面仍有工作空间,我怎么可能提高此限制?

谢谢

【问题讨论】:

  • Linux 2.6.32-504.el6.x86_64

标签: performance nginx openresty


【解决方案1】:

限制是 TCP/IP 堆栈配置问题。看看这个:https://www.percona.com/live/mysql-conference-2015/sites/default/files/slides/all_your_iops_are_belong_to_usPLMCE2015.pdf

尽管如此,不要对单个盒子抱有太大期望,分散负载。

更新

Nginx 配置可根据官方性能调优建议查看:https://www.nginx.com/blog/tuning-nginx/

【讨论】:

  • 嗯,谢谢您的建议,但是您链接的文章不是主要与HDD IOPS有关吗?硬盘是我首先想到的可能导致瓶颈的原因,但是有两件事:1)我没有从日志中获取我的统计信息,这是使用 lua 模块,并且读数发生在日志处理阶段,所以它实际上不是直接的查询日志文件 2) 当服务器受到压力时,IOstat 没有显示任何重要的硬盘活动
  • 您提到存在网络节流,这是由于 TCP/IP 堆栈配置效率低下、旧版本的 irqbalance 或 RSP(接收数据包转向)被禁用所致。这篇实际上是幻灯片的文章不是关于 IOPS,而是关于与网络配置相关的性能问题。你服务于什么样的回应?
  • 米哈伊洛夫谢谢,这是有道理的。我基本上是在提供一个静态 .txt 文件,或者只是用 404 回复查询一个不存在的 url,只是想看看服务器在没有其他限制因素的情况下可以处理多少原始请求。我猜想优化 TCP/IP 堆栈配置将是下一个合乎逻辑的步骤,是时候进行一些谷歌搜索了。
  • @Rdang,确切地说,在没有后端处理的情况下,您的起点可以是文件系统挂载选项访问调整、内核升级(作为重大影响选项)和 TCP /IP 缓冲区设置,这些幻灯片很好地介绍了。
【解决方案2】:

根据 mikhailov 的评论,这特别有助于分散网络的 IRQ 负载,这可能对您的情况有所帮助:

echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus

【讨论】:

  • 是的,这只是一个 E3-1230 V3
  • 所以这会产生显着差异,尤其是对于旧内核
猜你喜欢
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
  • 2015-08-29
相关资源
最近更新 更多