Apache Web Server имеет конфигурационный параметр MaxRequestsPerChild. http://httpd.apache.org/docs/2.0/en/mod/mpm_common.html#maxrequestsperchild «После запросов MaxRequestsPerChild дочерний процесс будет умирать».Является ли поворот дочерних процессов в node.js/cluster хорошей идеей?
Чтобы избежать раздавливания, вызванного утечками памяти, слишком большим количеством подключений или других непредвиденных ошибок, должен ли я делать то же самое при использовании модуля кластера node.js?
* Я использую Nginx перед node.js, а не Apache. Я упомянул об этом, чтобы я мог легко объяснить.
Я просто реализовать это следующим образом:
var maxReqsPerChild = 10; // Small number for debug
var numReqs = 0;
if (cluster.isMaster) {
var numCPUs = require('os').cpus().length;
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('death', function(worker) {
// Fork another when one died
cluster.fork();
});
} else {
http.createServer(function(webReq, webRes) {
// Count up
numReqs++;
// Doing something here
// Kill myself
if (numReqs > maxReqsPerChild) {
process.kill(process.pid); // Or more simply, process.exit() is better?
}
}).listen(1338);
}
Это работает хорошо до сих пор, но мне интересно, есть более правильный способ.
process.exit() лучше. – Mustafa
Спасибо, Мустафа. Я пытался использовать process.exit(), но этот подход приводит к фундаментальной проблеме - то есть, когда process.exit (или process.kill), все остальные запросы в один и тот же момент умирают, не реагируя на их клиентов. – chikaram