Go(lang): о MaxIdleConnsPerHost в транспорте http-клиента

В случае MaxIdleConnsPerHost установлено большое число, скажем, 1000, количество открытых соединений все равно будет зависеть от другого хоста, верно? Я имею в виду, что если разрешить 1000 незанятых соединений с одним и тем же хостом, то будет открыто 1000 соединений, если они не закрыты другим хостом?

Таким образом, эффективная установка этого значения на большое число приведет к тому, что вы никогда не закроете соединение, а будете ждать, пока другой хост сделает это? я правильно интерпретирую это?

1 ответ

Решение

Ваше понимание верно. MaxIdleConnsPerHost ограничивает количество подключений, которые не активно обслуживают запросы, но которые клиент не закрыл.

Свободные соединения полезны для веб-браузеров, поскольку они могут повторно использовать соединения для последующих HTTP-запросов к тому же серверу. Однако простоя подключения имеет стоимость для сервера. Они используют ресурсы ядра, и вы можете столкнуться с ограничениями на процессы или ядром на количество открытых соединений, файлов или дескрипторов, что может вызвать непредвиденные ошибки в вашей программе или даже для других программ на том же компьютере.

Поэтому будьте осторожны при увеличении MaxIdleConnsPerHost к большому количеству. Имеет смысл увеличить число незанятых соединений, если вы видите много подключений в течение короткого периода времени от одних и тех же клиентов.

Другие вопросы по тегам