登录
首页 >  Golang >  Go问答

去吧,tcp打开文件太多调试

来源:Golang技术栈

时间:2023-04-28 13:26:36 124浏览 收藏

golang学习网今天将给大家带来《去吧,tcp打开文件太多调试》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到golang等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

这是一个简单的 Go http (tcp) 连接测试脚本

func main() {
    ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintln(w, "Hello, client")
    }))
    defer ts.Close()
    var wg sync.WaitGroup
    for i := 0; i 

如果我在 Ubuntu 中运行它,我会得到:

panic: Get http://127.0.0.1:33202: dial tcp 127.0.0.1:33202: too many open files

其他帖子说要确保Close连接,我在这里做这一切。和其他人说增加最大连接限制ulimit或尝试sudo sysctl -w fs.inotify.max_user_watches=100000但仍然不起作用。

如何在单个服务器中运行数百万个 tcp 连接 goroutine?它仅在 2,000 个连接时崩溃。

谢谢,

正确答案

我认为您需要更改最大文件描述符。我之前在我的一个开发虚拟机上遇到过同样的问题,需要更改文件描述符最大值,而不是任何 inotify 设置。

FWIW,您的程序在我的虚拟机上运行良好。

路> ulimit -n
120000

但是在我跑步之后

路> ulimit -n 500
路> ulimit -n
500

我得到:

panic: Get http://127.0.0.1:51227: dial tcp 127.0.0.1:51227: socket: too many open files

不要落入Praveen做过的陷阱

注意ulimit!= ulimit -n

鉃�  cmd git:(wip-poop) 鉁� ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       1418
-n: file descriptors                4864

到这里,我们也就讲完了《去吧,tcp打开文件太多调试》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于golang的知识点!

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