Ich versuche sukzessive Ladezeiten einer URL zu messen, konnte aber nicht eine HTTP-Verbindung fallen lassen und mit jeder Messung neu starten. Mit diesem Code ...golang - scheint nicht http Verbindungen fallen lassen
func getloadtime (url string) float64 {
// setup client
tr := &http.Transport{
DisableKeepAlives: true}
client := &http.Client{Transport:tr}
// page load and measure
start := time.Now()
_, _ = client.Get(url)
return(time.Since(start).Seconds())
}
func main() {
for i := 0; i < 5; i++ {
fmt.Println(getloadtime("http://www.google.com"))
}
}
ich Messungen wie folgt aus:
2.75
0.13
0.09
0.12
0.115
So scheint es, die HTTP-Verbindung von der Anfangslast beibehalten wird, da die nachfolgenden Belastungen viel schneller sind. Ich habe auch Einstellung „Connection“ versucht, „Close“ in der Kopfzeile, aber die gleichen Ergebnisse erhalten:
req, err := http.NewRequest("GET", url, nil)
req.Header.Set("Connection", "close")
_, _ := client.Do(req)
Was mache ich falsch?
Sie sind nicht messen, was Sie denken, Sie sind. Ihr erstes Beispiel öffnet nicht nur jedes Mal eine neue Verbindung, sondern es leckt die Verbindungen nach der Rückkehr. Verwerfen Sie nie einen "http.Transport" oder Sie werden Verbindungen verlieren. Was ist das eigentliche Problem, das Sie versuchen zu lösen? – JimB
Ich versuche, konsistente Ergebnisse beim Laden der Seite zu Stresstests zu erhalten (dies ist eine vereinfachte Version - wird letztendlich von mehreren Prozessen sein), also versuche ich jedes Mal eine neue Verbindung zu simulieren/zu erstellen (und schließe sie) richtig). Offensichtlich wird etwas in den Seitenlastmessungen # 2- # 5 innerhalb der Schleife aufrechterhalten. Ich gehe davon aus, dass es die gleiche Verbindung verwendet ... aber ich kann es nicht sagen. –
Es kann unmöglich sein, dieselbe Verbindung zu verwenden, da Sie jedes Mal einen neuen Transport verwenden. Ich nehme an, es ist Ihr Resolver-Cache, der den Unterschied macht. Ermitteln Sie nicht die tatsächlichen Verbindungen. Es gibt auch 'Request.Close', um den Header automatisch zu setzen. – JimB