Сделал. Соединения теперь сообщают что они закрыты. Но при этом pprof продолжает указывать на спавнящихся и висящих net/http.(*persistConn).writeLoop и net/http.(*persistConn).readLoop.
On Saturday, January 9, 2016 at 7:55:56 PM UTC+2, Anton Byshovets wrote:Сделал. Соединения теперь сообщают что они закрыты. Но при этом pprof продолжает указывать на спавнящихся и висящих net/http.(*persistConn).writeLoop и net/http.(*persistConn).readLoop.Создайте client один раз в глобальной области видимости, после чего используйте его в функции HTTPGet из http://play.golang.org/p/r4SlncXynJ . Сейчас он у вас создается при каждом вызове функции. Каждый объект http.Client создает по две горутины на каждое подключение к серверу - для чтения и записи. Их-то и видно в pprof. Если бы использовался один client, то таких горутин было бы намного меньше.Навязчивая реклама: попробуйте fasthttp.Client - он автоматически закрывает idle соединения через 10 секунд, в отличие от net/http.Client, который вроде закрывает idle соединения только в случае, если их закроет сервер. Это может привести к недостатку свободных файловых дескрипторов при опросе большого количества разных серверов, которые долго не закрывают keep-alive соединения.
вторник, 19 января 2016 г., 13:38:11 UTC+2 пользователь Aliaksandr Valialkin написал:
On Saturday, January 9, 2016 at 7:55:56 PM UTC+2, Anton Byshovets wrote:Сделал. Соединения теперь сообщают что они закрыты. Но при этом pprof продолжает указывать на спавнящихся и висящих net/http.(*persistConn).writeLoop и net/http.(*persistConn).readLoop.Создайте client один раз в глобальной области видимости, после чего используйте его в функции HTTPGet из http://play.golang.org/p/r4SlncXynJ . Сейчас он у вас создается при каждом вызове функции. Каждый объект http.Client создает по две горутины на каждое подключение к серверу - для чтения и записи. Их-то и видно в pprof. Если бы использовался один client, то таких горутин было бы намного меньше.Навязчивая реклама: попробуйте fasthttp.Client - он автоматически закрывает idle соединения через 10 секунд, в отличие от net/http.Client, который вроде закрывает idle соединения только в случае, если их закроет сервер. Это может привести к недостатку свободных файловых дескрипторов при опросе большого количества разных серверов, которые долго не закрывают keep-alive соединения.
А нельзя ли об этом поподробней? Я у себя этого не наблюдаю...