登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-03-13 20:03:26 323浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《检查 golang 遗留代码中的打开连接》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我们最近开发了一款用 golang 编写的应用程序,该应用程序将有关访问的信息存储在数据库中。

我们在已投入生产的旧代码中遇到以下错误:

http:接受错误:接受tcp [::]:8080:accept4:打开太多 文件; 1秒后重试

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

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

我们已经看到代码使用了 github.com/astaxie/beego/orm 库 并且调用是使用 o := orm.neworm() 进行的,但我们不知道还能在哪里寻找。

更新

当该进程的打开文件总数 (lsof -u myuser | grep "10930" | wc -l) 达到 2048 时,会出现打开文件过多错误

此外,lsof -u myuser | 的输出grep "protocol: tcpv6" 抛出如下内容:

1
2
3
4
5
6
7
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 例程中打开了太多连接而导致的。 如果是这种情况,请配置工作池以限制可能打开的文件数量:gobyexample worker pools

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

今天关于《检查 golang 遗留代码中的打开连接》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>