我们的应用程序在高负载时没有响应,等待时间更长.进程使用率异常低(每个进程的cpu利用率约为15%,我们的应用程序在8个进程上运行).
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:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
TIME-WAIT 0 0 127.0.0.1:29993 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:28522 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:29055 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:31849 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:32744 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:28304 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:34858 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:36707 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:34756 127.0.0.1:4567
TIME-WAIT 0 0 104.131.91.122:443 108.162.250.6:55549
TIME-WAIT 0 0 127.0.0.1:32629 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:34544 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:34732 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:33820 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:33609 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:34504 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:32463 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:35089 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:30003 127.0.0.1:4567
TIME-WAIT 0 0 104.131.91.122:443 199.27.128.100:36383
TIME-WAIT 0 0 127.0.0.1:33040 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:34038 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:28096 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:29541 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:30022 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:31375 127.0.0.1:4567
TIME-WAIT 0 0 127.0.0.1:29827 127.0.0.1:4567
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个独特的套接字连接,在我们的端部配置错误并且在应该打开一个套接字时打开数百个套接字?
预先感谢您提供的任何帮助!
最佳答案