Проверьте открытые соединения в устаревшем коде golang - PullRequest
0 голосов
/ 21 октября 2019

Недавно мы получили приложение, написанное на golang, которое хранит информацию о посещениях в базе данных.

Мы сталкиваемся со следующей ошибкой в ​​этом устаревшем коде, который уже находится в производстве:

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

Мы считаем, что эти ошибки вызваны открывающимися вызовами в базе данных, но не можем найти точку, где эти вызовы суммируются.

Есть лиспособ проверить, есть ли открытые вызовы базы данных и где в коде?

Мы видели, что в коде используется библиотека github.com/astaxie/beego/orm, а вызовы выполняются с использованием o := orm.NewOrm(), но мы не знаем, где еще искать.

ОБНОВЛЕНИЕ

Ошибка слишком большого количества открытых файлов появляется, когда общее количество открытых файлов для этого процесса (lsof -u myuser | grep "10930" | wc -l) достигает 2048

Кроме того, вывод lsof -u myuser | grep "protocol: TCPv6" выдает что-то вродеэто:

ana     10930 myuser 3405u     sock       0,8      0t0 307230406 protocol: TCPv6
ana     10930 myuser 3407u     sock       0,8      0t0 307230465 protocol: TCPv6
ana     10930 myuser 3408u     sock       0,8      0t0 307231438 protocol: TCPv6
ana     10930 myuser 3427u     sock       0,8      0t0 307234900 protocol: TCPv6
ana     10930 myuser 3441u     sock       0,8      0t0 307236431 protocol: TCPv6
ana     10930 myuser 3446u     sock       0,8      0t0 307237446 protocol: TCPv6
ana     10930 myuser 3457u     sock       0,8      0t0 307239557 protocol: TCPv6

И число этих соединений с носком становится все выше и выше.

Кто-то знает, что это за соединения и почему они открываются?

1 Ответ

0 голосов
/ 21 октября 2019

Это может быть вызвано слишком большим количеством соединений, открываемых в различных подпрограммах. В этом случае настройте рабочий пул, чтобы ограничить количество возможных открытых файлов: gobyexample рабочих пулов

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

...