【发布时间】:2014-01-08 03:35:46
【问题描述】:
我使用 nodejs 构建了一个 http 服务器。每次请求收入,http服务器连接到memcache,检查并返回数据或做其他事情。当我使用 Apache Benchmark 测试性能时,例如:-n 1000。输出显示它刚刚完成了大约 900 个请求,然后 http 服务器无法再提供服务。 我究竟做错了什么?你能解释一下会发生什么吗?
这里是我的代码:
http.createServer(function(req, res) {
var client = new mc.Client(ip, mc.Adapter.binary);
client.connect(function() {
client.get(key, function(err, response) {
if(err) { //not exist
..
res.end(result)
..
}
else { //exist in memcache
var result = response[key];
res.end(result);
}
});
}); }); 这是benchmarch之后的结果:
This is ApacheBench, Version 2.4.1 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
apr_poll: The timeout specified has expired (70007)
Total of 896 requests completed
更新:我发现我没有断开每个请求的 memcached。问题解决了!!!
【问题讨论】:
-
我认为您的 if-else 逻辑不正确。错误并不意味着密钥不存在。我相信当 key 不存在时会返回 nil 。错误是因为处理给定的命令失败。
-
是的,我知道,但是当我使用 mc 模块并且密钥不存在时,它会打印错误并且响应也为空。如果无法连接 memcache,我在 mc 模块中找不到任何 api,比如 timeout .. 所以我必须先启动 memcache。
标签: node.js