Node.js内存问题

时间:2015-10-13 00:45:57

标签: javascript node.js ibm-cloud

我对Node非常缺乏经验,所以这可能是一个简单的问题。我运行一个包含唯一亚马逊优惠券的node.js服务器。在高峰时段,我将看到数百个请求/秒都请求我存储在全局对象中的优惠券。通常在一个对象中存储有数千张优惠券。它存储在内存中,由IBM的Bluemix托管。

global.coupons['product1'] = ['coupon1', 'coupon2', 'coupon3'];

我已经运行这个服务器好几个月了,随着我的请求增加,我增加了.js服务器的分配内存(现在最多3 GB)。

最近,服务器正在丢失存储在内存中的所有信息,这会在发送优惠券请求时为我的用户返回错误。擦除内存之前的最后一个日志是:

Detected 1024 MB available memory, 512 MB limit per process (WEB_MEMORY)

为什么内存被擦除?这种情况会发生在交通远远低于峰值的时候,所以我真的不确定原因。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

我会尝试类似MongoDBsequelize的内容,它不会同时将所有优惠券加载到内存中,但会慢一点。如果这成为一个问题,我会研究负载平衡和Node.js cluster module

答案 1 :(得分:0)

这听起来像你解释的错误是应用程序中更深层次问题的结果。

更详细,并且由于这个问题远离请求峰值而发生,这似乎是内存泄漏。您的应用程序似乎消耗了越来越多的内存,而没有回收垃圾回收。一旦达到内存消耗限制,应用程序就会死机。

我建议使用apache benchmarkhttperf等工具分析应用程序的任何端点,并分析内存连续性增加的位置。

找到这样的终点后,检查以下项目并删除它们。

  • 回调和关闭
  • 您定义的类的漏洞构造函数
  • 集合对象,例如数组和哈希映射
  • 上游代码

在过去帮助过我的article中找到了。