【问题标题】:Simulate website load on Node.JS在 Node.JS 上模拟网站负载
【发布时间】:2012-10-16 08:53:54
【问题描述】:

我正在考虑创建自己的简单负载测试,我可以通过多个请求(例如 100-1000 个并发用户)访问我的网站以查看它的执行情况。我想尝试 Node.js,但我不知道这是否是适合这项工作的错误技术,因为 Node.js 不使用线程? 我可以使用 Node.js 使用的异步模型来模拟许多用户请求,还是更适合用其他语言(如 Ruby/.NET/Python)来做?

【问题讨论】:

  • 您是否有理由要使用节点,而不是 JMeterab 之类的?
  • 我知道它存在多个框架,但我这样做主要有两个原因。为了提高我的编程技能(这只是一个小爱好项目),并能够测试 ajax 调用(我认为没有太多工具有这个选项,因为它们不解释 Javascript)

标签: node.js performance-testing


【解决方案1】:

Node.js 应该非常适合这项任务。我在工作中这样做。您必须更改的一个关键部分是 http 套接字池。以下代码将完全禁用池,如果您愿意,可以让您的 Node.js 进程挨饿。

var http = require('http');
var req = http.request(..., agent: false)

您可以通过http.Agent documentation 了解更多信息。

您对线程的关注是精明的,但即使您达到了这个限制(Node 非常擅长保持资源效率),解决方案也很简单:启动负载测试的多个实例(进程)。实际上,您可能必须完全使用多台机器才能正确模拟负载。

在任何情况下,使用 Ruby 或 Python 都不会自动获胜。对于 I/O 和网络绑定的任务,异步编程是理想的,而 Node 在这方面表现出色。同样,虽然 Ruby 和 Python 拥有第三方异步框架,但它们的定义比 Node 中提供的标准异步框架更加晦涩。

【讨论】:

  • 感谢您提供有关禁用池的提示。
【解决方案2】:

Node 可以触发任意数量的请求(尽管您可能需要更改 http:Agent 的默认值)。与节点固有的任何东西相比,您更有可能受到操作系统的限制(当然,这些限制将适用于您使用的任何其他语言)。

【讨论】:

    【解决方案3】:

    使用nodeload 创建负载测试很简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-05
      • 2010-10-21
      • 1970-01-01
      • 2013-12-30
      • 2015-08-26
      • 2014-10-24
      • 2016-05-26
      • 1970-01-01
      相关资源
      最近更新 更多