我正在单个实例Windows服务器2k8R2天青虚拟机上运行一个专有的客户端/服务器应用程序。
客户端非常依赖与服务器的连接。 但是如果我花了几分钟没有任何活动,Azure端的某些东西强行closures了连接(据我所知可以从日志中看出)。 如果这是天青本身或窗户的function,我不积极。
有没有实现某种forms的保活function(我不能因为软件是专有的),是否有我可以延长这种超时?
我已经看到几个引用来改变loadbalanced情况下的idletimeout,但这只是一个实例。
提前致谢!
您正在虚拟机前面实现软件负载平衡器的devisefunction。 默认情况下,会在4分钟后closures所有空闲连接,但您可以将超时设置为4到30分钟之间的任何值。
Azure负载平衡器的可configuration空闲超时
然而,在基础设施和应用方面都有一些保持活力的做法是很好的做法。 这将会为你节省更多的麻烦。
Azure虚拟机的TCP设置
Azure VM通过使用NAT(networking地址转换)与公用Internet进行通信。 NAT设备将公有IP地址和端口分配给Azure VM,从而允许该VMbuild立与其他设备通信的套接字。 如果数据包在特定时间之后停止stream经该套接字,则NAT设备杀死该映射,并且该套接字可被其他VM使用。
这是一种常见的NAT行为,它可能导致基于TCP的应用程序出现通信问题,这些应用程序希望套接字在超时期限之后被维护。 对于build立连接状态的会话,有两个空闲超时设置需要考虑:
通过Azure负载平衡器入站。 此超时默认为4分钟,最多可以调整30分钟。 使用SNAT(源NAT)出站。 此超时设置为4分钟,不能调整。 为确保连接不会超出超时限制,应确保应用程序保持活动状态,或者可以configuration底层操作系统。 Linux和Windows系统使用的设置不同,如下所示。
对于Linux,您应该更改下面的内核variables。 net.ipv4.tcp_keepalive_time = 120 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_probes = 8
对于Windows,您应该更改下面的registry值。 KeepAliveInterval = 30 KeepAliveTime = 120 TcpMaxDataRetransmissions = 8
以上设置确保保持活动数据包在空闲时间2分钟(120秒)后发送,然后每30秒发送一次。 如果这些数据包中的8个失败,会话将被丢弃。
来源: https : //github.com/Microsoft/azure-docs/blob/master/includes/guidance-tcp-session-timeout-include.md