服务器开启ENC导致接口响应慢
RockPine 人气:0背景:调用内部某系统接口,核查人员信息。
服务器操作系统:Windows Server 2016标准版,正版授权,排除盗版因素,服务器为实体服务器,非云平台。
本方系统开发语言:Java
问题:
在本地笔记本开发环境下,接口调用正常,响应时间可以接受,但是一旦部署到服务器上的生产环境,接口响应非常慢,响应时间一般在9秒。
首先检查网络,telent对方服务器端口开放,而且,能够调用成功返回正确结果,说明网络是互通的,ping大包也很稳定。
其次,对方系统是否存在限制,联系对方技术人员,告知没有限制,而且他本地调用接口也非常正常,接口服务是正常的。
第三,再来检查我自身系统,但是笔记本上的开发环境调用接口响应时间很快,只是部署在服务器上才出现接口响应慢的问题。
第四,看来是服务器的原因。我在服务器上,调用了一个互联网开放的接口,响应时间也很快,再次陷入迷茫和忧愁。
最后一招,那就抓包看看吧,就是抓包看出了问题。
以上是抓包信息
可以清楚的看到,建立TCP链接的时候出现了2次重传才成功,而且每一次调用接口都是这个问题,所以问题症结出现在这里。
找了个网络工程师同事给看了看,一眼就看到了ECN标志,说其它抓包中都没看到过。
搜索一番,终于对ECN有了简单的了解,它是TCP/IP网络中的显式拥塞通告,对方服务器及网络设备支持才能顺利使用,对方服务器默认关闭ECN的话,我得不到对方响应,就会重传两次,如果还得不到响应,那就不再加ECN标志了。
所以,我们等待了三次才成功建立链接,大约9秒的时间就过去了。
打开cmd终端,输入命令 netsh int tcp show global 就能看到ECN功能的状态了,我这里确实是打开的
找到问题症结后,输入命令 netsh int tcp set global ecn=disable,成功返回后,就关闭了ECN功能,可以再次输入上一条命令看一看功能状态是否已关闭。
关闭后,我们再次调用接口,终于飞速响应了。
加载全部内容