gpt4 book ai didi

node.js - 如何使用集群在 heroku 上正确扩展 nodejs 应用程序

转载 作者:IT老高 更新时间:2023-10-28 23:16:54 25 4
gpt4 key购买 nike

我最近在 heroku 日志中注意到一个警告,说这对我来说似乎是新的

web.1: Detected 512 MB available memory, 512 MB limit per process (WEB_MEMORY)

web.1: Recommending WEB_CONCURRENCY=1

我做了一些研究,发现了 cluster article ,这是在 nodejs 中使用集群的“默认”方式,但它与 newly updated article 完全矛盾。包含这个新的 WEB_CONCURRENCY 环境变量,并为每个测功机提供不同的大小建议(顺便说一句,它要小得多)

最佳答案

第一个链接是从 2014 年 7 月开始的,曾经是推荐的做事方式。然而,Heroku 的 dynos 非常以内存为中心,当使用每个 CPU 的最大内核数时(如第一篇文章所述),很容易超过分配的内存限额。

相反,新的建议是分析您的应用并确定每个进程需要多少内存。将环境变量 WEB_MEMORY 设置为此值,然后将您的集群代码更新为以下内容:

var cluster = require('cluster');
var numWorkers = process.env.WEB_CONCURRENCY;

if(cluster.isMaster) {
// Master process: fork our child processes
for (var i = 0; i < numWorkers; i++) {
cluster.fork();
}

// Respawn any child processes that die
cluster.on('exit', function() {
cluster.fork();
});

} else {
// Child process, put app initialisation code here.
}

通过使用 WEB_MEMORY 变量,Heroku 可以根据您正在运行的 dyno 的大小生成 WEB_CONCURRENCY 值,从而 fork 正确数量的进程以确保确保您的应用不超过内存限额。

顺便说一句,如果您确实超出了内存分配(对于 1x dyno,每个 dyno 512MB),则将使用交换空间来处理超出部分。这会减慢您的应用程序,导致请求时间增加,并且通常会导致缓慢。如果你超过了内存使用量(大约是分配的三倍),Heroku 将重新启动你的测功机。

关于node.js - 如何使用集群在 heroku 上正确扩展 nodejs 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28616813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com