Go,tcp打开文件太多调试

2024-01-06

这是一个简单的 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 < 2000; i++ {
        wg.Add(1)
        go func(i int) {
            defer wg.Done()
            resp, err := http.Get(ts.URL)
            if err != nil {
                panic(err)
            }
            greeting, err := ioutil.ReadAll(resp.Body)
            resp.Body.Close()
            if err != nil {
                panic(err)
            }
            fmt.Printf("%s", i, greeting)
        }(i)
    }
    wg.Wait()
}

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

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

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

如何在单个服务器中运行数百万个 tcp 连接 goroutine? 只有 2,000 个连接才会崩溃。

Thanks,


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

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

·> ulimit -n
120000

但当我跑完之后

·> ulimit -n 500
·> ulimit -n
500

I get:

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

** 不要落入 Praveen 那样的陷阱 **

Note 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go,tcp打开文件太多调试 的相关文章

随机推荐

  • 部署 Apache Camel 应用程序时出现警告

    当我将应用程序部署到 GlassFish 时 我看到以下警告 WARN AnnotationTypeConverterLoader Ignoring converter type org apache activemq camel conv
  • valgrind 在使用 libcurl 时检测内存泄漏(无 ssl)

    在我的 C 程序中 我使用 libcurl 的一些基本函数 今天我运行 valgrind 来检查是否存在内存泄漏 并且 valgrind 疯狂地报告了多个错误 我基本上追踪到 CURL curl CURLcode res curl curl
  • 当实体包含 UUID 时,H2 数据库的 Hibernate 数据库模式验证失败

    For a H2数据库架构映射到具有 UUID 的实体 the Hibernate ddl 验证失败与例外 根本原因 org hibernate tool schema spi SchemaManagementException 架构验证
  • HTML5异步文件上传,上传流始终无效

    我正在尝试调试我不久前构建的异步文件上传器 它不再工作 我已经花了很多时间但没有成功 服务器接收的流总是损坏 事实上我保存的文件 图像 无法打开 为了简化调试 我设置了一个全新的 ASP NET 项目 其中包含两个主要文件 带有表单字段的
  • 连接到 Redis 127.0.0.1:6379 时出错 (Errno::ECONNREFUSED) - Wercker

    我正在使用 wercker 来运行我的 Rails 应用程序的规范 我在 wercker 上设置 redis 时遇到问题 在我的 Rails 应用程序中我有redis rb看起来像这样 if Figaro env rediscloud ur
  • ServiceContainer、IoC 和一次性对象

    我有一个问题 我要标记这个问题主观因为这就是我认为它演变成的 更多的讨论 我希望能有一些好的想法或者一些发人深省的想法 我对这个冗长的问题表示歉意 但你需要了解上下文 问题基本上是 您如何处理与 IoC 容器相关的具体类型 具体来说 谁负责
  • 使用测试类编译 jar

    如何在android中编译带有测试类的jar 我正在使用 android gradle 插件 1 3 1 classpath com android tools build gradle 1 3 1 我试过了 task testSource
  • CMake:C 和 CXX 编译器识别未知 Win10 CMakeGUI

    所以我尝试根据 youtube 上的本教程配置一个文件 这非常简单 https www youtube com watch v gYmgbqGfv 8 https www youtube com watch v gYmgbqGfv 8 我在
  • Postgres 从 csv 文件复制 - 没有这样的文件或目录

    我正在尝试将一个 相当大的 txt 文件导入到 PostgreSQL 9 1 中的表 geonames 中 我位于服务器的 目录中 该目录中放置了一个名为 US txt 的文件 我设置了search path变量 geochat 我正在使用
  • git克隆,忽略文件

    我想克隆一个 GitHub 存储库 其中包含一个巨大的 exe 文件 为什么 我对 exe 文件的使用为零 而且它比其他所有文件的总和要大得多 有没有办法在克隆文件时忽略该文件 我的猜测是 如果我要求作者制作一个无可执行文件的分支 我会更幸
  • Python:从父文件夹导入文件

    现在我知道这个问题已经被问过很多次并且我已经查看了其他线程 到目前为止没有任何效果 从使用sys path append 只需导入foo 我有一个 python 文件希望导入一个文件 位于其父目录中 您能帮我弄清楚我的子文件如何成功导入其父
  • ARM 部署:获取 Azure Function API 密钥

    作为流分析部署解决方案的一部分 我想通过例如检索 ARM 模板中的 Azure 函数应用程序的 API 密钥listkeys 函数 有没有办法在 ARM 部署期间分别通过 ARM 模板检索此密钥 如果是 如何检索 Thanks Azure
  • 使用谷歌地图获取附近的地点

    我正在尝试使用谷歌地图来查找我当前位置的附近地点 我在 Google Developer Console 中创建了一个项目并获得了 ios APIkey 和 Server APIkey 我还启用了适用于 iOS 的 Google Place
  • C99/C11 限制类型限定符是否对没有定义的函数意味着什么?

    假设我们有一个函数声明 但我们无权访问其定义 void f int restrict p int restrict q int restrict r 由于我们不知道如何访问指针 因此我们无法知道调用是否会触发未定义的行为 即使我们传递相同的
  • OpenGL顶点缓冲区混淆

    有人愿意解释一下之间的区别吗顶点缓冲区 a 顶点数组 a 顶点缓冲区对象 and a 顶点数组对象 我什至不确定这些是否都是代表不同事物的术语 但我已经看到它们都出现在 OpenGL 规范中 我知道一个顶点缓冲区只包含顶点而没有其他内容 一
  • 如果文件扩展名为 jpg 或 png,如何使用 chrome.downloads.onDeterminingFilename 更改下载的文件名?

    我该如何使用chrome downloads onDeterminingFilename https developer chrome com extensions downloads event onDeterminingFilename
  • 进度条显示已播放的音乐量

    假设我使用mp3play播放mp3文件的模块 并使用ttk Progressbar 我想显示播放音乐的数量 持续时间 有没有代码可以实现 我还想要一个计时器 a 来显示音乐播放的持续时间 import ttk import mp3play
  • 如何在 angularjs 中创建和更新 JSON 文件?

    我只想创建一个简单的应用程序 它使用 AngularJS 创建 更新和删除 JSON 文件中的项目 我在网上查看过 只找到了使用 JavaScript 对象来编辑或删除 JSON 类型数据的示例 但我想在 AngularJS 中使用 JSO
  • scala 动态多维可变数组,如数据结构

    有没有办法在Scala中构建动态多维数组 我知道 Scala 中的数组必须按照其大小和维度进行初始化 所以我不希望这样 数据结构应该是动态的 我尝试用列表中的列表来构建它 但我在某种程度上迷失了自己 有很多不同的类型 也许我只是没有找到合适
  • Go,tcp打开文件太多调试

    这是一个简单的 Go http tcp 连接测试脚本 func main ts httptest NewServer http HandlerFunc func w http ResponseWriter r http Request fm