【发布时间】:2017-08-15 02:10:29
【问题描述】:
我正在运行一个具有 8 个工作进程的集群节点应用程序。我在服务请求时提供输出,输出包括处理请求的进程的 ID:
app.get('/some-url', function(req, res) {
console.log('Request being handled by process #' + process.pid);
res.status(200).text('yayyy');
});
当我疯狂地刷新/some-url 时,我在输出中看到每次处理请求都是同一个进程。
我使用node load-test 来查询我的应用程序。同样,即使有 8 个工作人员可用,也只有一个工作人员处理每个请求。这显然是不可取的,因为我希望对 集群 应用程序进行负载测试以查看所有进程协同工作的整体性能。
这是我初始化应用程序的方式:
var cluster = require('cluster');
if (cluster.isMaster) {
for (var i = 0; i < 8; i++) cluster.fork();
} else {
var app = require('express')();
// ... do all setup on `app`...
var server = require('http').createServer(app);
server.listen(8000);
}
如何让我的所有员工工作?
【问题讨论】:
-
您的请求不使用任何资源。如果您在内部进行一些计算,所花费的时间超过了处理请求所需的时间,会发生什么?就目前而言,工作人员从不忙于接受请求和回答请求。
-
是否预计在第一个工作人员忙之前永远不会使用第二个工作人员?无论哪种方式,我都希望
load-test能够拨打足够多的电话,让工作人员忙起来。特别是因为请求可能需要 50 毫秒以上的时间来计算(为了简洁起见,我在示例中省略了实际计算)。 -
@LorenzMeyer 我实际上已经做了一些额外的测试;我人为地将计算时间提高到几秒钟,然后在浏览器中快速刷新;你的想法是对的!该测试导致使用多个进程。
load-test似乎在前一个请求完成之前不会触发它的下一个请求。如果您提交答案,我会给您支票!
标签: node.js process node-cluster