Недавно мы получили приложение, написанное на 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
И число этих соединений с носком становится все выше и выше.
Кто-то знает, что это за соединения и почему они открываются?