我有一個應用程序,當發出傳出的HTTP請求(額外的5秒延遲)時,我注意到它的性能很差。通過大量的試驗/測試,我意識到將Docker外部的應用程序移動到主機中消除了奇怪的HTTP延遲。將應用程序從主機移動到docker將HTTP滯後時間增加了5秒
我使用高山linux作爲docker鏡像,並且ubuntu正在託管父機器。
泊塢窗信息:
泊塢版本1.11.2,構建b9f10c9
"NetworkSettings": {
"Bridge": "",
"SandboxID": "3ab81b8a66a99c6e9b1a1f49c5410d8260db37eee96c9231c0d83c1b40f84fa5",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"8084/tcp": null
},
"SandboxKey": "/var/run/docker/netns/3ab81b8a66a9",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "464acfb299941bbd301051ea05451823a7e527161185570c00f8569ce2afde88",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:03",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "32ebc75bc4c98106c6775905906723405c58bc3de914283234a8e1273cba7193",
"EndpointID": "464acfb299941bbd301051ea05451823a7e527161185570c00f8569ce2afde88",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:03"
}
}
}
我跑了搬運工容器沒有任何幻想:
docker run -d test
我的代碼(Python)的時間有多長它需要整個請求週期:
now = datetime.now()
response = http.request('POST', url, body=request_body, headers=headers)
print(
"\nTotal Time: ",
(datetime.now() - now).total_seconds()
)
恆定時間是5-6秒,在容器外面,它不到一秒鐘。
我做了一次鑽取以檢查容器內部的DNS和tcpdump。從那裏報告似乎沒有什麼有趣的。 DNS看起來很好,並且數據包捕獲報告0.2秒的請求時間。
我從數據包捕獲中發現的唯一有趣的事情是,從http.request被調用時看到數據包的開頭花了5秒鐘。
我確信這裏有一個碼頭網絡配置錯誤。請讓我知道是否有任何更多信息需要添加。我們正在使用docker for 20其他服務沒有這個問題。
謝謝!
邁克爾很可能發現了DNS,你提到這是你自己的懷疑。比較容器內部和外部的/etc/resolv.conf。 – BMitch