node.js - 为什么 Heroku 上的 Node.js 应用程序在 2 个线程和 4 个线程下的性能相同?

标签 node.js heroku load-testing hyperthreading

我一直在研究一系列自动负载测试脚本,并且我注意到,平均而言,在 Heroku dyno 上运行 2 个进程的集群和 4 个进程的集群之间没有区别(在本例中,尽管 dyno 报告自己有四个可用 CPU,但 Hapi.js 服务器只是立即返回回复。 1 和 2 个进程之间的差异是巨大的,吞吐量几乎增加了 100%。

我的猜测是 Intel CPU/超线程报告的核心数量是实际可用核心数量的两倍,并且 Node 并没有真正从调度中受益,但关于 Heroku dynos 规范的可用信息似乎很少。这是准确的,还是有其他原因导致性能在没有 I/O 的服务器上的 2 个线程上达到上限?

最佳答案

这是由于以下几个原因造成的:

  • Heroku dynos 在共享 EC2 服务器上运行 - 这意味着 CPU 将在您和 X 个其他用户之间分配。
  • 您的性能可能会更好/更差,具体取决于您的邻居使用的 CPU 数量。
  • 您的 CPU 将成为 Heroku(以及一般 Node)上最大的瓶颈。

如果您正在进行 CPU 密集型工作,则需要跨测功机水平扩展。如果你正在做 IO 密集型的事情,你应该可以随着时间的推移垂直扩展到大型动态 =)

更新:要在此处添加更多信息,这就是虚拟化的工作方式。 EC2 盒子(以及任何 Linux 服务器)将始终报告核心机器的 CPU 总数,而不是 VM。希望有帮助

关于node.js - 为什么 Heroku 上的 Node.js 应用程序在 2 个线程和 4 个线程下的性能相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27054587/

相关文章:

node.js - Sendgrid 入站解析 Webhook 电子邮件未在 Sendgrid 上收到

visual-studio-2010 - Visual Studio 负载测试启动和清理方法

python - 如何在 Heroku 免费计划上使用 Celery 任务部署 Django 应用程序

heroku - 您如何在 Heroku 上运行实用程序服务?

heroku - 在 heroku 上的 node.js 应用程序中使用 Magick++

c# - 如何使自定义提取规则属性数据驱动?

Hyperledger Fabric 的性能测试

javascript - 当该字段是外键时,如何使用 OR 条件在 sequelize 中进行查询

node.js - Nodejs - 使用选项 --data 来自文件的 Rest api 调用

node.js - 使用VM模块运行Node.js脚本: "ReferenceError: require is not a function"