(увеличивается в потолок правильнее сказать, так как фат истиной утечки установлен не был) из net/http, fasthttp при наличии > 1000 горутин?
func worker(timeout time.Duration, wg *sync.WaitGroup, in chan Pair, out chan Pair) {
client := &fasthttp.Client{
MaxIdleConnDuration: timeout,
}
for {
scheme := []string{"https"}
domain := <-in
for _, s := range scheme {
t := time.Now()
req := fasthttp.AcquireRequest()
resp := fasthttp.AcquireResponse()
host := fmt.Sprintf("%s://%s", s, domain.String)
req.Header.SetMethodBytes([]byte("GET"))
req.SetRequestURI(host)
err := client.DoTimeout(req, resp, timeout)
s := fmt.Sprint(time.Now().Sub(t), resp.StatusCode(), err, " ", host, " ", resp.LocalAddr())
out <- Pair{String: s, Index: domain.Index, Err: err}
fasthttp.ReleaseResponse(resp)
fasthttp.ReleaseRequest(req)
}
}
wg.Done()
}
Я его не стал заморачиваться писать, покуда 250 лямов строк я не дожидался, когда обработаются. Меня раньше разрывается RAM
О, я знаю, было такое же. У client есть метод типа CloseIdleConnections(), его нужно вызывать, когда клиент больше не нужен, он закроет все соединения и освободит память.
.
@cuda23 попробуй это, должно помочь, просто закрывай сразу как тебе не нужно будет соединение.
Вот, собственно я так делал
Обсуждают сегодня