繁体   English   中英

NodeJs进程在aws上耗尽内存

[英]NodeJs process running out of memory on aws

我正在使用 Mongodb 在 aws t2micro 实例上运行 nodeJS 应用程序。 这是我服务器上的 index.js 文件的样子

const db = require('./src/db');
const coins = require('./src/scrapers/populate-coins'); 
const scrape = require('./src/scrapers/index.js');
const settings = require('./src/trading/init-settings.js');
const trading = require('./src/trading/index.js');
const server = require('./src/index.js');

这里的抓取和交易是在服务器处理 API 请求时在 setInterval 内运行的过程。 我正在使用 angular 前端,并已将整个事物部署在具有 1GB RAM 和 16GB 存储空间的单个 aws t2micro 实例上。 事情顺利几天,直到数据库中的数据微不足道。 一旦我的一个表中有超过 10K 行的数据,API 调用就开始花费大量时间,多达 1 分钟。 在开发工具中,它显示等待(TTFB)花费了大约 40 秒。 检查日志后,我得到了这个

0|trading  | Warning: connect.session() MemoryStore is not
0|trading  | designed for a production environment, as it will leak
0|trading  | memory, and will not scale past a single process.
0|trading  | FATAL ERROR: Committing semi space failed. Allocation failed - process out of memory
0|trading  |  1: node::Abort() [node /home/ec2-user/app/bc-trading/index.js]
0|trading  |  2: 0x13740dc [node /home/ec2-user/app/bc-trading/index.js]
0|trading  |  3: v8::Utils::ReportOOMFailure(char const*, bool) [node /home/ec2-user/app/bc-trading/index.js]
0|trading  |  4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [node /home/ec2-user/app/bc-trading/index.js]
0|trading  |  5: v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [node /home/ec2-user/app/bc-trading/index.js]
0|trading  |  6: v8::internal::Heap::CollectGarbage(v8::internal::GarbageCollector, v8::internal::GarbageCollectionReason, char const*, v8::GCCallbackFlags) [node /home/ec2-user/app/bc-trading/index.js]
0|trading  |  7: v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [node /home/ec2-user/app/bc-trading/index.js]
0|trading  |  8: v8::internal::Runtime_AllocateInNewSpace(int, v8::internal::Object**, v8::internal::Isolate*) [node /home/ec2-user/app/bc-trading/index.js]

谁能帮我弄清楚这里发生了什么? 帮助将不胜感激。 api 调用的屏幕截图

我建议添加日志来检查处理的对象的大小是否很大或执行函数并监视服务器内存/cpu 使用情况,它可能是 mongoDb 或正在使用所有资源的节点进程,因此导致错误/slow 响应,并在每个函数开始之前和结束之后记录服务器指标。
您还应该考虑在 1 gb ram 上运行 angular 、 node 和 mongoDb 会导致问题,如果数据库中有足够的记录,即使它是一个开发环境,节点垃圾收集器可能无法释放内存,您将最终会导致一切都变慢的堆积。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM