在研究一个同时受影响的代理集群的问题时,我发现了在建立SSL连接时的奇怪行为。
其症状是当影响发生时,传出的HTTPS请求比通常慢,我将其归结为完成SSL握手的速度慢。HTTP请求/连接不会以相同的方式受到影响。
该问题似乎是由TCP 3路握手结束和代理发送Client Hello
之间的延迟引起的。在此之后,握手正常完成,没有延迟。
以下是流量捕获的一些示例:
到api.twitter.com
(2.4秒延迟):
到graph.facebook.com
(延迟28.4秒):
即使在第二个例子中有了重传,Client Hello
数据包也不应该花那么长时间才能出去。
curl
和openssl s_client connect
进行了测试,结果相同。下面的答案推荐了几个房间,听到了这些缓慢的声音:
strace -T -o output.strace openssl s_client -connect 104.244.42.66:443 </dev/null
connect(3, {sa_family=AF_INET, sin_port=htons(443), sin_addr=inet_addr("104.244.42.66")}, 16) = 0 <2.266597>
poll([{fd=4, events=POLLIN}], 1, 5000) = 1 ([{fd=4, revents=POLLIN}]) <2.387366>
write(3, "\26\3\1\0S\1\0\0O\3\1X\342\24\3556c\354\270T\302\225[\236\317\327\305\205r\177\t/"..., 88) = 88 <0.000034>
read(3, "\26\3\1\0001\2\0", 7) = 7 <2.556229>
read(3, "\0-\3\1\332\37\254+\240\320\236qA\375\275L\23l\340\355\205x\264\274\273\213\377\323&\345\307O"..., 47) = 47 <0.000011>
read(3, "\26\3\1\v\273", 5) = 5 <0.000007>
(...)
read(3, "\24\3\1\0\1", 5) = 5 <2.223115>
poll()
调用是反向DNS查找,它正在执行:
sendto(4, "\3623\1\0\0\1\0\0\0\0\0\0\00266\00242\003244\003104\7in-ad"..., 44, MSG_NOSIGNAL, NULL, 0) = 44 <0.000157>
在相同的跟踪中,其他类似的poll()
调用是快速的。
发布于 2017-03-24 16:12:10
您可以尝试使用strace运行curl命令,以查看它们在哪个系统调用上“挂起”。我发现这些东西有时与DNS查找(或反向DNS查找)有关。
strace curl https://[...]
https://serverfault.com/questions/840427
复制相似问题