gpt4 book ai didi

go - 检查 golang 遗留代码中的打开连接

转载 作者:行者123 更新时间:2023-12-01 22:28:08 27 4
gpt4 key购买 nike

我们最近得到了一个用 golang 编写的应用程序,它在数据库中存储有关访问的信息。

在这个已经投入生产的遗留代码中,我们面临以下错误:

http: Accept error: accept tcp [::]:8080: accept4: too many open files; retrying in 1s



我们认为此错误是由对正在打开的数据库的调用引起的,但找不到此调用堆叠的点。

有没有办法检查是否打开了数据库调用以及代码在哪里?

我们已经看到代码使用了 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

而且这个sock连接的数量越来越多。

有人知道这些连接是什么以及为什么要打开它们吗?

最佳答案

这可能是由于在各种 go-routines 中打开了太多的连接。
如果是这种情况,请配置工作池以限制可能打开的文件数量:gobyexample worker pools

检查这个问题"Go, tcp too many open files debug" .接受的答案可能会给您一个快速的解决方案,但它不能解决主要问题。

关于go - 检查 golang 遗留代码中的打开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58490552/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com