我一直在研究一系列自动负载测试脚本,并且我注意到,平均而言,在 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/