Nginx Ubuntu对网络处理的限制

Nginx Ubuntu对网络处理的限制,nginx,networking,ubuntu-18.04,nginx-reverse-proxy,nginx-config,Nginx,Networking,Ubuntu 18.04,Nginx Reverse Proxy,Nginx Config,Ubuntu操作系统是否限制机器可以处理的最大请求数? 为了开始解决这个问题,我创建了一个Nginx代理服务器,其中一个后端服务器处理传入的POST请求。接下来,我将使用包pycurl以每次请求0.001秒(即1000个请求/秒)的速度向代理服务器地址发送总共1000个请求。(我还使用了具有类似结果的python包请求)。在服务器端,完成请求大约需要4秒,即250转/秒 当我将这个数字扩展到每次发送10000个请求。001秒,仍然是1000 RPM时,Nginx代理服务器在处理之前可以接收的请求

Ubuntu操作系统是否限制机器可以处理的最大请求数?

为了开始解决这个问题,我创建了一个Nginx代理服务器,其中一个后端服务器处理传入的POST请求。接下来,我将使用包pycurl以每次请求0.001秒(即1000个请求/秒)的速度向代理服务器地址发送总共1000个请求。(我还使用了具有类似结果的python包请求)。在服务器端,完成请求大约需要4秒,即250转/秒

当我将这个数字扩展到每次发送10000个请求。001秒,仍然是1000 RPM时,Nginx代理服务器在处理之前可以接收的请求数量似乎受到了一些批处理限制。这个上限似乎是1200

事件顺序

  • 请求以1000 rpm的速率从客户端发送到代理服务器,总共发送10000个请求
  • nginx服务器接收到一定数量的请求(大约1200个),并批量响应这些请求。(我查一下https://IP_Address/nginx_status 正在发送请求。Nginx状态信息可在此处找到:)。信息显示,nginx代理服务器收到的请求数量从~1200跳到~2400跳到~3600,以此类推
  • 批处理中的请求得到处理
  • 在下一批似乎准备好处理之前,会出现明显的时间延迟
  • 这个过程一直持续到完成
  • 按照客户机总共10000个请求的1000rps速率,服务器端rps仍然大约为250个,其中有一个后端服务器和一个代理服务器

    我扩展了后端,增加了8个线程,这样可以提高吞吐量响应率。(所使用的机器是一个AWS Lightsail实例,具有8个核心)。然而,事实并非如此。(我已经用尽了几乎所有的Nginx代理服务器配置设置,这不是问题)。即使有8个线程和一个代理服务器,服务器端的RPS也达到了大约250个RPS,并且似乎发生了相同的批处理请求处理。(同样,通过观察发送请求时的nginx状态来检查这一点)

    我还测试了直接向其中一个后端服务器发送请求,吞吐量再次达到大约250 rpm。您可以想象,增加/减少线程数会影响结果,但相反,它们都以大约250 rpm的速度始终只处理传入的POST请求

    已编辑:后端服务器进程读取请求并发送响应大约需要0.0002秒。(此指标不包括网络延迟)。后端是一个超短进程,在收到请求后计算一个数字

    设置

    客户端-->代理服务器-->单线程处理响应~250 RPM

    客户端-->代理服务器-->八个线程处理响应~250 RPM

    客户端-->单线程处理响应~250 RPM

    同样,这些是POST请求,而不是GET请求。(发送的数据包不大)


    鉴于此背景信息,是否存在限制计算机处理或接收请求速率的操作系统级别设置?如果是这样,如何改变这种情况?如果没有,是否存在可能导致此问题的网络限制?如果是,我如何测试或更改这些限制?

    [这是我评论的更新副本]


    关于nginx,这可能是相关的:-检查
    worker\u进程
    worker\u连接

    除此之外,它似乎受到后端服务器的限制-您没有说太多关于它看起来像什么以及它如何处理请求的内容。您应该监视/跟踪您的流程,以确定它在做什么。 您还可以使用诸如
    netstat
    ss
    tcpdump
    等工具来监视和跟踪后端服务器上的连接

    其中一个限制显然是连接可用的最大端口数:对于单个源和目标,这大约是28K()-如果您正在快速创建和关闭连接,您可能会受到等待时间状态的限制(请参阅上面的链接)当连接关闭时,每个插座都会移动到它。
    但是,您说您最多生成了10K个连接,所以看起来有些不同。

    关于nginx,这可能与:-检查
    worker\u进程
    worker\u连接
    有关。除此之外,它似乎真的受到后端服务器的限制-您没有说太多关于它看起来像什么以及它如何处理请求。其中一个限制显然是可用于连接的最大端口数:对于单个源和目标,这大约是28K(),因此您远远没有达到这一点,并且不要忘记您可能也达到了客户端的并发限制。为清楚起见,我将worker_进程设置为auto,并将worker connections设置为1024。(该机器是一个AWS lightsail实例,具有8个核心)。