accept tcp [::]: accept4: слишком много открытых файлов; повторная попытка в 1с - PullRequest
0 голосов
/ 04 июля 2019

У нас есть API, работающий на golang, он получает довольно большой трафик, внезапно мы получили следующую ошибку сегодня

http: принять ошибку: принять tcp [::]: 8443: принять4: слишком много открытых файлы; повторная попытка в 1с

Пара вещей, которые я проверял ранее, это максимальный размер FD, при приемлемом размере 16 КБ на процесс, но по какой-то причине он достиг максимума без предоставления подробностей.

Не могли бы вы указать несколько gotools или указателей, чтобы узнать, как я могу найти причину этой проблемы?

Любая помощь или указатели будут по достоинству оценены

1 Ответ

1 голос
/ 04 июля 2019

Я не уверен, существуют ли инструменты Go для решения подобных проблем. Вероятно, имеется некоторая утечка соединения в коде.

Обычная утечка, которая может произойти, - это забывание звонить resp.Body.Close() после того, как он получил полезную нагрузку http.Response.

Свободные соединения могут быть другой возможной причиной. Согласно HTTP-пакету документа:

По умолчанию Transport кэширует соединения для последующего повторного использования. Это может оставить много открытых соединений при доступе ко многим хостам. Это поведение может управляться с помощью метода CloseIdleConnections для транспорта и полей MaxIdleConnsPerHost и DisableKeepAlives.

Если это так, вы можете попытаться явно вызвать CloseIdleConnections на вашем Transport дескрипторе или уменьшить значение MaxIdleConnsPerHost.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...