【发布时间】:2011-01-25 23:39:58
【问题描述】:
毫无疑问,我在做一些愚蠢的事情,但是我在使用 Nerve 微框架运行一个简单的 node.js 应用程序时遇到了问题。使用 apachebench 进行测试,似乎我的单个控制器中的代码被调用的频率高于应用程序本身的调用频率。
我已经创建了一个这样的测试脚本:
'use strict';
(function () {
var path = require('path');
var sys = require('sys');
var nerve = require('/var/www/libraries/nerve/nerve');
var nerveCounter = 0;
r_server.on("error", function (err) {
console.log("Error " + err);
});
var app = [
["/", function(req, res) {
console.log("nc = " + ++nerveCounter);
}]
];
nerve.create(app).listen(80);
}());
启动服务器。从另一个盒子运行负载测试:
/usr/sbin/ab -n 5000 -c 50 http://<snip>.com/
...
Complete requests: 5000
...
Percentage of the requests served within a certain time (ms)
...
100% 268 (longest request)
但节点脚本本身一直打印到:
nc = 5003
rc = 5003
换句话说,服务器被调用了 5000 次,但控制器代码被调用了 5003 次。
任何想法我做错了什么?
更新
我显着改变了这个问题的语气和内容,以反映 Colum、Alfred 和 GregInYEG 给我的帮助,让我意识到问题不在于 Redis 或 Nerve,而可能在于 apachebench。
【问题讨论】:
-
您能否添加一些代码来增加文件,因为您的脚本可能会发生一些奇怪的事情。不是 Redis。
-
感谢 Colum 的想法 - 我添加了几个全局计数器(见上文)。计数器也运行到 5003 - 证明问题不在于 Redis。
-
p.s:我认为您应该完全删除 node_redis 代码,因为即使您更新了标题,它仍然可能看起来像 node_redis 代码是罪魁祸首。
-
看起来 Apache Bench 可以发送比您请求的更多的请求。 “'ab' 工具实际上确实可以正确衡量其请求的完成情况,但它实际上可能发送的请求比您要求的要多。这是因为它计算的是回复而不是请求。”有关更多信息,请参阅此博客文章:adrianotto.com/2010/05/apache-benchmark-ab-is-not-exact
-
感谢 GregIn - 确认这似乎是问题所在。我用 Express 而不是 Nerve 重新运行了测试,问题再次出现。
标签: node.js apachebench