nginx – 处于TIME-WAIT状态的高#套接字,服务器在加载时无响应

前端之家收集整理的这篇文章主要介绍了nginx – 处于TIME-WAIT状态的高#套接字,服务器在加载时无响应前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我们的应用程序在高负载时没有响应,等待时间更长.进程使用率异常低(每个进程的cpu利用率约为15%,我们的应用程序在8个进程上运行).

Nginx错误日志输出显示了以下一些:

  1. 2014/12/04 03:39:31 [crit] 24383#0: *2008067 connect() to 127.0.0.1:4567 Failed (99: Cannot assign requested address) while connecting to upstream,client: 108.162.246.229,server: example.org,request: "GET /socket.io/?EIO=3&transport=polling&t=1417682366937-11501 HTTP/1.1",upstream: "http://127.0.0.1:4567/socket.io/?EIO=3&transport=polling&t=1417682366937-11501",host: "example.org",referrer: "https://example.org/unread"

我看到了什么

> ss -tan的输出grep TIME-WAIT | wc -l在30,000附近的某处,哎哟!
>该应用程序将响应,然后:

>所有进程都会突然降至接近0 cpu使用率
>应用程序将无法响应
>大约30秒后,应用程序将重新启动,无限重复

需要获得应用程序,所以创可贴解决方案:

> echo 28000 65535> ip_local_port_range(MongoDB运行于27101,所以我选择了一个上限)
> echo 1>的/ proc / SYS /网/的IPv4 / tcp_tw_reuse
> echo 1>的/ proc / SYS /网/的IPv4 / tcp_tw_recycle

这使得TIME-WAIT状态下的套接数量减少到400以上.

这是ss -tan的片段grep TIME-WAIT:

  1. State Recv-Q Send-Q Local Address:Port Peer Address:Port
  2. TIME-WAIT 0 0 127.0.0.1:29993 127.0.0.1:4567
  3. TIME-WAIT 0 0 127.0.0.1:28522 127.0.0.1:4567
  4. TIME-WAIT 0 0 127.0.0.1:29055 127.0.0.1:4567
  5. TIME-WAIT 0 0 127.0.0.1:31849 127.0.0.1:4567
  6. TIME-WAIT 0 0 127.0.0.1:32744 127.0.0.1:4567
  7. TIME-WAIT 0 0 127.0.0.1:28304 127.0.0.1:4567
  8. TIME-WAIT 0 0 127.0.0.1:34858 127.0.0.1:4567
  9. TIME-WAIT 0 0 127.0.0.1:36707 127.0.0.1:4567
  10. TIME-WAIT 0 0 127.0.0.1:34756 127.0.0.1:4567
  11. TIME-WAIT 0 0 104.131.91.122:443 108.162.250.6:55549
  12. TIME-WAIT 0 0 127.0.0.1:32629 127.0.0.1:4567
  13. TIME-WAIT 0 0 127.0.0.1:34544 127.0.0.1:4567
  14. TIME-WAIT 0 0 127.0.0.1:34732 127.0.0.1:4567
  15. TIME-WAIT 0 0 127.0.0.1:33820 127.0.0.1:4567
  16. TIME-WAIT 0 0 127.0.0.1:33609 127.0.0.1:4567
  17. TIME-WAIT 0 0 127.0.0.1:34504 127.0.0.1:4567
  18. TIME-WAIT 0 0 127.0.0.1:32463 127.0.0.1:4567
  19. TIME-WAIT 0 0 127.0.0.1:35089 127.0.0.1:4567
  20. TIME-WAIT 0 0 127.0.0.1:30003 127.0.0.1:4567
  21. TIME-WAIT 0 0 104.131.91.122:443 199.27.128.100:36383
  22. TIME-WAIT 0 0 127.0.0.1:33040 127.0.0.1:4567
  23. TIME-WAIT 0 0 127.0.0.1:34038 127.0.0.1:4567
  24. TIME-WAIT 0 0 127.0.0.1:28096 127.0.0.1:4567
  25. TIME-WAIT 0 0 127.0.0.1:29541 127.0.0.1:4567
  26. TIME-WAIT 0 0 127.0.0.1:30022 127.0.0.1:4567
  27. TIME-WAIT 0 0 127.0.0.1:31375 127.0.0.1:4567
  28. TIME-WAIT 0 0 127.0.0.1:29827 127.0.0.1:4567
  29. TIME-WAIT 0 0 127.0.0.1:29334 127.0.0.1:4567

我的问题:

>其中很多都是从127.0.0.1到127.0.0.1,这是正常的吗?对等体地址不应该都来自外部IP吗?

>我们的Node.js应用程序支持Nginx代理,在CloudFlare DNS之后,这限制了唯一入站IP地址的数量,这可能是相关的吗?

>如何正确减少TIME-WAIT状态下的插座数量
>我很肯定我们每秒没有3000个独特的套接字连接,在我们的端部配置错误并且在应该打开一个套接字时打开数百个套接字?

预先感谢您提供的任何帮助!

最佳答案
最后,我做了更多的研究,并阅读了关于在Nginx代理后面扩展Node应用程序的very excellent guide.

当我将keepalive参数添加Nginx中的上游块时,出现了主要区别.事实证明,Nginx工作者不会缓存传入的连接并重新使用它们,从而导致创建数千个新连接(特别是w / socket.io握手等)

@MichaelHampton建议使用unix域套接字也可以解决这个问题.

猜你在找的Nginx相关文章