aws内核正在杀死我的节点应用程序

时间:2016-05-24 08:20:59

标签: node.js mongodb amazon-web-services redis database

问题:

我正在执行我的mongoose查询测试,但内核会因为OutOfMemory原因而终止我的节点应用。

流量场景:针对单个请求

/获取请求 - >阅读用户的文档(eg.schema)[此模式具有ref:用户模式及其中一个字段] - > COMPILE / REARRANGE根据客户端要求的响应格式从mongodb读取查询的输出[这涉及数据的过滤和循环]。 - >更新此文档的一个字段并再次将其保存回mongoDB - >更新REDIS - >发送响应[以上编译的响应]回到请求的客户端

**当100个并发客户做同样的事情时,上述情况失败了...... MEM - 非常低(<10MB) CPU-MAX(> 98%)

我能弄清楚的是读取和写入发生的速率,它通过排队所有请求来阻塞mongodb,从而延迟导致如此剧烈的CPU和MEM值的节点,最后应用程序被内核杀死。

请建议我如何在这样的流程中实现并发...

1 个答案:

答案 0 :(得分:0)

您现在遇到了Linux OOM Killer。基本上,所有Linux内核(不仅仅是亚马逊)都需要在RAM耗尽时采取行动,因此他们需要找到一个可以杀死的进程。通常,这是一直要求最大内存的过程。

您的3个主要选项是:

  1. 添加交换空间。如果有足够的空间,可以在根磁盘上创建交换文件,或创建一个小的EBS卷,将其附加到实例,并将其配置为交换。
  2. 移至具有更多RAM的实例类型。
  3. 通过停止/删除未使用的进程或重新配置应用程序来减少实例的内存使用量。
  4. 选项1可能是最简单的短期调试。对于生产性能,您需要考虑优化应用程序的内存使用情况或获取具有更多RAM的实例。