Node.js内存问题

Node.js Memory Issues

本文关键字:问题 内存 js Node      更新时间:2023-09-26

我对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)

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

提前感谢。

我会尝试像MongoDB或sequelize这样的东西,它不会同时将所有优惠券加载到内存中,但速度会慢一点。如果这成为一个问题,我会研究负载平衡和Node.js集群模块。

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

更详细地说,由于这个问题发生在远离请求峰值的地方,它看起来像是内存泄漏。你的应用程序似乎消耗了越来越多的内存,却没有把它还给垃圾回收。一旦达到内存消耗限制,应用程序就会死亡。

我建议使用apache benchmark或httperf等工具分析应用程序的任何端点,并分析内存持续增加的地方。

一旦找到这样的端点,检查以下项目并消除它们。

  • 回调和闭包
  • 您定义的类的泄漏构造函数
  • 集合对象,如数组和hashmap
  • 上游代码

在一篇过去帮助过我的文章中找到的