问题:
我正在执行我的mongoose查询测试,但内核会因为OutOfMemory原因而终止我的节点应用。
流量场景:针对单个请求
/获取请求 - >阅读用户的文档(eg.schema)[此模式具有ref:用户模式及其中一个字段] - > COMPILE / REARRANGE根据客户端要求的响应格式从mongodb读取查询的输出[这涉及数据的过滤和循环]。 - >更新此文档的一个字段并再次将其保存回mongoDB - >更新REDIS - >发送响应[以上编译的响应]回到请求的客户端
**当100个并发客户做同样的事情时,上述情况失败了...... MEM - 非常低(<10MB) CPU-MAX(> 98%)
我能弄清楚的是读取和写入发生的速率,它通过排队所有请求来阻塞mongodb,从而延迟导致如此剧烈的CPU和MEM值的节点,最后应用程序被内核杀死。
请建议我如何在这样的流程中实现并发...
答案 0 :(得分:0)
您现在遇到了Linux OOM Killer。基本上,所有Linux内核(不仅仅是亚马逊)都需要在RAM耗尽时采取行动,因此他们需要找到一个可以杀死的进程。通常,这是一直要求最大内存的过程。
您的3个主要选项是:
选项1可能是最简单的短期调试。对于生产性能,您需要考虑优化应用程序的内存使用情况或获取具有更多RAM的实例。