Node 中数千个并发 http 请求

2024-01-29

我有一个包含数千个 URL 的列表。我想通过 http 请求进行健康检查 (healt.php)。

这是我的问题:

我在节点中编写了一个应用程序。它以集中的方式发出请求。我使用一个变量来控制打开的并发连接数。 300,即。 一个接一个,每个请求都那么快,不超过500ms。

但是当我运行该应用程序时,结果是:

$ node agent.js

200ms   url1.tld
250ms   url4.tld
400ms   url2.tld
530ms   url8.tld
800ms   url3.tld
...
2300ms  urlN.tld
...
30120ms urlM.tld

看来并发是有限制的。当我执行时

$ ps axo nlwp,cmd | grep node

结果是:

6 node agent.js

有 6 个线程来管理所有并发连接。我找到了一个环境变量来控制节点中的并发:UV_THREADPOOL_SIZE

$ UV_THREADPOOL_SIZE=300 node agent.js

200ms   url1.tld
210ms   url4.tld
220ms   url2.tld
240ms   url8.tld
400ms   url3.tld
...
800ms  urlN.tld
...
1010ms urlM.tld

问题仍然存在,但结果好多了。使用 ps 命令:

$ ps axo nlwp,cmd | grep node

132 node agent.js

下一步:查看node的源代码,我在deps/uv/src/unix/threadpool.c中找到了一个常量:

#define MAX_THREADPOOL_SIZE 128

好的。我已将该值更改为 2048,编译并安装节点并运行一次命令

$ UV_THREADPOOL_SIZE=300 node agent.js

一切看起来都还好。响应时间不会逐渐增加。但是当我尝试使用更大的并发数时,就会出现问题。但这一次它与线程数无关,因为通过 ps 命令我看到线程数足够了。

我尝试用golang编写相同的应用程序,但结果是相同的。时间在逐渐增加。

那么,我的问题是:并发限制在哪里?内存和CPU负载以及带宽都没有越界。我调整了 sysctl.conf 和 limit.conf 以避免一些限制(文件、端口、内存……)。


您可能会受到 http.globalAgent 的限制maxSockets。根据您使用的是 http 还是 https,看看这是否可以解决您的问题:

require('http').globalAgent.maxSockets = Infinity;
require('https').globalAgent.maxSockets = Infinity;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node 中数千个并发 http 请求 的相关文章

  • 等待两个异步函数完成,然后在 Node.js 中继续

    我正在 Node js 中开发一个应用程序 其中调用异步函数两次 并将值分配给全局变量 问题是我想使用这两个调用的结果来做其他事情 但是这个其他事情不会等待结果被分配 这是我的代码 var a var b let x abcd foo x
  • 如何在 Express (NodeJS) 中验证和处理表单

    Express 是否有首选的表单处理和验证库 我真的在寻找与 Django 表单中类似的抽象级别 即模板中的验证和错误报告 如果可以在客户端使用相同的验证 那就太好了 有人用过或者写过什么好东西吗 看起来有一个模块位于https githu
  • 为什么 fopen("any_path_name",'r') 不给出 NULL 作为返回值?

    在调试一些代码时 我得到如下内容 include
  • Heroku 应用程序上的 Nodejs Express EACCES 0.0.0.0:80

    我正在尝试在他们的网站上新创建的 Heroku 应用程序上运行 Node 应用程序 我按照他们的步骤操作 但在显示应用程序状态时仍然遇到错误 我跟着Node js 入门 https devcenter heroku com articles
  • CMake 链接 glfw3 lib 错误

    我正在使用 CLion 并且正在使用 glfw3 库编写一个程序 http www glfw org docs latest http www glfw org docs latest 我安装并正确执行了库中的所有操作 我有 a 和 h 文
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 从 Xlib 转换为 xcb

    我目前正在将我的一个应用程序从 Xlib 移植到 libxcb 但在查找有关我有时使用的 XInput2 扩展的信息时遇到了一些麻烦 libxcb 中有 XInput2 实现吗 如果是的话 在哪里可以找到文档 目前我在使用此功能时遇到问题
  • Bash - 在与当前终端分开的另一个终端中启动命令的新实例

    我有一个简单的 bash 脚本 test sh 设置如下 bin bash args if args 0 check capture then watch n 1 ls lag home user capture0 watch n 1 ls
  • 内核的panic()函数是否完全冻结所有其他进程?

    我想确认内核的panic 功能和其他类似kernel halt and machine halt 一旦触发 保证机器完全冻结 那么 所有的内核和用户进程都被冻结了吗 是panic 可以被调度程序中断吗 中断处理程序仍然可以执行吗 用例 如果
  • 配置tomat的server.xml文件并自动生成mod_jk.conf

    我在用apache 2 2 15 and tomcat6 6 0 24 on CentOS 6 4并希望使用 tomcat 服务器的功能 通过添加以下内容自动生成 mod jk conf 文件
  • Intel 上的 gcc 中的 _mm_pause 用法

    我参考过这个网页 https software intel com en us articles benefitting power and performance sleep loops https software intel com
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • TRACKER:错误TRK0005:无法找到:“CL.exe”。该系统找不到指定的文件

    我尝试在 Windows 8 上的 Node js 项目中执行以下命令 npm 安装 电子邮件受保护 cdn cgi l email protection 但我收到一个错误 我不知道如何处理 TRACKER 错误TRK0005 无法找到 C
  • 如何删除控制台中打印的字符

    我一直在搜索如何用其他语言执行此操作 发现必须使用特殊字符 b 来删除最后一个字符 如何删除控制台应用程序中打印的字符 linux https stackoverflow com questions 430713 how do i eras
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它
  • Node / Express Handlebars - 在哪里定义自定义助手

    我正在开发一个节点 快速 车把应用程序 我刚刚发现了自定义助手 但我不知道在哪里定义它们 我尝试在实际视图模板 hbs 文件中添加一些
  • Linux 为一组进程保留一个处理器(动态)

    有没有办法将处理器排除在正常调度之外 也就是说 使用sched setaffinity我可以指示线程应该在哪个处理器上运行 但我正在寻找相反的情况 也就是说 我想从正常调度中排除给定的处理器 以便只有已明确调度的进程才能在那里运行 我还知道
  • 尝试在节点 0.12 上重新安装 `node-sass`?

    我想使用谷歌网络入门套件 我安装了node js v0 12 0 node sass gulp 然后跑 sudo npm install 当我打字时gulp serve然后得到这个错误 Using gulpfile web starter

随机推荐

  • 如何解决.NET Core包版本冲突

    我正在从 NET MVC 5 Web 应用程序迁移到 NET Core 2 2 Web API 项目以及五个 NET Standard 2 0 项目 所有项目都托管在一个解决方案下 我现在收到 28 个关于包冲突的警告 MSB3277 这些
  • 如何更改geom_point中的颜色或ggplot中的线条[重复]

    这个问题在这里已经有答案了 我有一个这样的数据 data lt structure list sample structure c 1L 1L 1L 1L 1L 1L 1L 1L 1L 1L 2L 2L 2L 2L 2L 2L 2L 2L
  • 重载或可选参数之间的性能差异?

    我想知道是否应该在 C 中使用可选参数 到目前为止 我总是重载方法 但可选参数也很好 更干净 代码更少 我在其他语言中使用它们 所以我在某种程度上也习惯了它们 有什么反对使用它们的吗 性能对我来说是第一个关键点 会掉吗 Example co
  • 如何保存 raphael 生成的 svg

    有没有办法将 raphael 生成的 SVG 保存为 svg 文件 请注意 它只需要在 Chrome 中工作 我想出了一个解决方案拉斐尔导出 https github com ElbertF Raphael Export 它给了我一个有效的
  • 更新已部署的 SSIS 包

    我有一个已部署的 SSIS 包 其中包含时间表和所有内容 现在 我对这个包进行了更改 我是否必须重新部署它 并再次为其设置计划 或者是否有办法让已部署的 SSIS 包更新为最新版本 是的 您需要将包重新部署到调度程序期望找到包的任何位置 但
  • 在 Tensorflow 2 中将梯度可视化为热图

    我正在研究通过引导反向传播生成热图的任务 我重写了原来的Relu并获得了每个参数的梯度 但是 我不确定下一步应该做什么 感谢您的帮助 谢谢你 这是我的代码 我首先使用 tf RegisterGradient GuidedRelu like
  • Python urlparse——提取不带子域的域名

    需要一种使用 Python urlparse 从 url 中提取不带子域的域名的方法 例如我想提取 google com 来自完整的网址 例如 http www google com 我能想到的最接近的urlparse is the net
  • 如何在Python中将JSON字符串转换为整数?

    如何将此 json 中的年份和 isbn 转换为整数 title The Notebook author Nicholas Sparks year 1996 isbn 0553816713 您可以简单地用相应的 int 值更新这些值 dat
  • XStream:解析时 XML 层次结构崩溃

    我有一个 XML 文档 由 Adob e XFA 表单生成 其中包含如下数据
  • fullcalendar.io 可以在 .net core Blazor 中使用吗?

    我尝试在 Blazor WebAssembly 页面中使用 FullCalendar 任何人都知道如何在 Blazor 中使用 FullCalendar 任何人都可以帮助我吗 我将 FullCalendar 包含在 libman json
  • 安装和导出仅 INTERFACE 库,CMake

    新的 CMake 用户在这里 我使用以下 CMake 文件制作了一个简单的仅标头库 cmake minimum required VERSION 3 7 project mylib VERSION 0 1 LANGUAGES CXX set
  • 是否可以在悬停时隐藏链接地址?

    我已经设置了一个包含很多链接的图表 当您将鼠标悬停在链接上时 它会显示链接在浏览器左下角的位置 这真的让我很烦恼 如下所示 可以删除这个吗 只要我可以隐藏 删除它 任何方法都可以 HTML CSS JS 等 仅当您使用 a 带有集合的元素h
  • 标题和元标签未在服务器中的角度 SSR 中呈现

    我在前端使用 Angular 6 开发了一个网站 默认情况下 Angular 对 SEO 不友好 因此为了做到这一点 我以 Angular Universal 或 Angular SSR 服务器端渲染 的方式实现它 我更新了代码并比较了之前
  • “SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED”和视图

    如果你设置SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED在从具有从多个表中进行复杂选择的视图中进行选择的存储过程中 这个位置READ UNCOMMITTED该视图中所有表的事务隔离级别 Th
  • 使用 Javascript 读取 CSV 标头

    我有一个 csv 文件 其标题如下所示 header1 header2 header3 header4 value1 value2 value3 value4 value1 value2 value3 value4 value1 value
  • 同步三个ajax请求

    我有三个 AJAX 请求相继触发 并且我希望能够同时回显所有数据 ajax type POST url page1 php data var1 var1 success function msg results2 load page2 ph
  • Android Facebook SDK SSO“无法显示您请求的页面”

    我一整天都被这个非常令人沮丧的问题困扰 通过 Google 我发现很多人都有同样的问题 但没有与新的 Android 版 Facebook API 相关的答案 我已完全按照此处列出的步骤进行操作 https developers faceb
  • Yii 嵌套设置到下拉菜单

    I m using Yii nested set behavior which helps me to keep my categories nested as seen here nevermind title rows they are
  • 如何为当前平台使用适当的颜色类别?

    我试图在 iOS 和 OS X 之间共享我的 Scene Kit 代码 但接受颜色 和图像 的 API 调用采用 UIColor UIImage 或 NSColor NSImage 具体取决于平台 如何在 Swift 中创建正确的类而不重复
  • Node 中数千个并发 http 请求

    我有一个包含数千个 URL 的列表 我想通过 http 请求进行健康检查 healt php 这是我的问题 我在节点中编写了一个应用程序 它以集中的方式发出请求 我使用一个变量来控制打开的并发连接数 300 即 一个接一个 每个请求都那么快