说明
我有一个运行python应用程序的AWS ec2实例(ubuntu 16)。在其中,我调用了一些Facebook Account Kit API,也调用了Google Play Store API。在我两周前重新启动实例之前,它们都工作正常。
重新启动后,请求需要5分钟以上才能完成,这完全是不可接受的。我必须手动将超时设置为超过10分钟,以使请求能够完成。
问题仅发生在我的一台服务器上,我在另一台服务器上以相同的环境运行,它的响应时间不到一秒,效果很好。
临时修复
要暂时解决此问题,然后使用代理服务器完成请求。
情况
requests
在python环境中进行了尝试,并且响应时间非常糟糕,超过5分钟。
{'Connection' : 'keep-alive' }
,则第二个请求将继续正常。 当前代码
响应时间较慢的请求。
url_get_access_token = "https://graph.accountkit.com/v1.3/access_token?grant_type=authorization_code&code=%s&access_token=AA|%s|%s"
url_get_access_token = url_get_access_token % (token, self.facebook_app_id, self.facebook_account_kit_scert)
response = requests.get(url_get_access_token)
body = response.json()
我上面提到的代理服务器是同一子网中的另一个实例,但是我使用DNS服务器进行呼叫。
response = requests.get("https://proxyserver.com/somepath", params={})
由于它仅影响其中一台服务器,这是DNS问题还是AWS配置?请帮忙,谢谢。
更新
定时卷发的结果,似乎使用iPv6进行调用会花费更多时间。
$ time curl -4 -s https://graph.accountkit.com/v1.3
$ time curl -6 -s https://graph.accountkit.com/v1.3
iPv4
real 0m0.665s
user 0m0.068s
sys 0m0.020s
iPv6
real 2m7.180s
user 0m0.008s
sys 0m0.000s
答案 0 :(得分:0)
我想到两个项目。
调试:
$ cat /etc/resolv.conf
$ time dig aaaa graph.accountkit.com
您可能列出了多个名称服务器, 并不是所有人都反应灵敏, 这样一来,在死者身上超时时,您就需要进行长时间的查找。
调试:
$ time curl -4 -s https://graph.accountkit.com/v1.3
$ time curl -6 -s https://graph.accountkit.com/v1.3
它将显示“无效的OAuth 2.0访问令牌”,是的,很好。 我们感兴趣的是连接需要多长时间, 发送GET并检索Web文档。
此域同时提供A和AAAA地址。
如果要烘烤IPv6,则可能需要一段时间
使requests.get()
能够故障转移到IPv4。
编辑
有人破坏了您的IPv6传输。
在现代互联网中这是不可接受的。
丢弃的数据包超时可能导致经过127秒的时间。
traceroute6
和ping6
之类的工具可以
帮助您或网络专业人员进行诊断
损失在哪里。
ACL可能太紧,
正在丢弃不应该的IPv6数据包。
丢弃ICMP尤其糟糕。
为了使TCP正常工作,必须交付ICMP。
tcpdump
(或Wireshark)数据包跟踪会有所帮助
确定到底是什么向南。
您可能正在患PMTUD black-holing。
看看是否显示任何“数据包太大”的ICMP报告:
$ sudo tcpdump -tvvvni eth0 icmp6 and ip6[40+0]==2
仅查看出站端口443 TCP重新传输的时间 将为为什么失败两分钟提供很多启示 然后比特突然开始流动。