Skip to content

Instantly share code, notes, and snippets.

@devops-1
Created May 31, 2017 23:00
Show Gist options
  • Save devops-1/0db72a149c608e89b096358c8c8562ec to your computer and use it in GitHub Desktop.
Save devops-1/0db72a149c608e89b096358c8c8562ec to your computer and use it in GitHub Desktop.
cluster.js
var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
var _ = require('underscore');
if (!process.env.PORT) {
throw new Error('process.env.PORT not set');
}
var CLUSTER_ENV_VARS = {};
if (cluster.isMaster) {
fork();
} else {
require('./app.js');
}
/**
* fork one process per cpu
*/
function fork() {
for (var i = 0; i < numCPUs; i++) {
var envClone = _.clone(process.env);
envClone.PORT = parseInt(process.env.PORT)+i;
var worker = cluster.fork(envClone);
CLUSTER_ENV_VARS[worker.id] = envClone;
}
cluster.on('exit', function(worker, code, signal) {
console.log('worker %s died, forking again', worker.process.pid);
var new_worker = cluster.fork(CLUSTER_ENV_VARS[worker.id]);
CLUSTER_ENV_VARS[new_worker.id] = CLUSTER_ENV_VARS[worker.id];
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment