我对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)
为什么内存被擦除?这种情况会发生在交通远远低于峰值的时候,所以我真的不确定原因。
提前谢谢。
答案 0 :(得分:0)
我会尝试类似MongoDB或sequelize的内容,它不会同时将所有优惠券加载到内存中,但会慢一点。如果这成为一个问题,我会研究负载平衡和Node.js cluster module。
答案 1 :(得分:0)
这听起来像你解释的错误是应用程序中更深层次问题的结果。
更详细,并且由于这个问题远离请求峰值而发生,这似乎是内存泄漏。您的应用程序似乎消耗了越来越多的内存,而没有回收垃圾回收。一旦达到内存消耗限制,应用程序就会死机。
我建议使用apache benchmark或httperf等工具分析应用程序的任何端点,并分析内存连续性增加的位置。
找到这样的终点后,检查以下项目并删除它们。
在过去帮助过我的article中找到了。