第一个链接是从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.
}
Run Code Online (Sandbox Code Playgroud)
通过使用WEB_MEMORY变量,Heroku可以WEB_CONCURRENCY根据您正在运行的dyno的大小生成一个值,从而分叉正确的进程数以确保您的应用程序不超过内存容量.
顺便说一句,如果你确实超过了内存分配(1x dyno每个dyno 512MB),交换空间将用于超额.这会降低您的应用程序速度,导致请求时间增加,并且通常会导致缓慢.如果超出内存使用量(约为分配的三倍),Heroku将重新启动你的dyno.
| 归档时间: |
|
| 查看次数: |
2762 次 |
| 最近记录: |