【问题标题】:Nodejs HTTP server connect memcacheNodejs HTTP 服务器连接内存缓存
【发布时间】: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


【解决方案1】:

关于 nodejs 应用程序的一个棘手问题是内存上限为 1.4GB。如果您的服务器使用超过允许的限制,它将挂起或崩溃。您可以自定义构建您的 nodejs 应用程序以增加此值。

如果不使用变量,请确保对变量进行垃圾收集(例如将某些模块范围变量设置为 null)。

我没有足够的信息告诉你出了什么问题。我建议查看服务器日志。

【讨论】:

  • 我更新了我的代码。我不认为它内存不足,似乎服务器无法再从内存缓存中获取数据..
猜你喜欢
  • 1970-01-01
  • 2017-11-24
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 2012-07-26
  • 2021-12-30
  • 1970-01-01
相关资源
最近更新 更多