[英]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]
我建議添加日志來檢查處理的對象的大小是否很大或執行函數並監視服務器內存/cpu 使用情況,它可能是 mongoDb 或正在使用所有資源的節點進程,因此導致錯誤/slow 響應,並在每個函數開始之前和結束之后記錄服務器指標。
您還應該考慮在 1 gb ram 上運行 angular 、 node 和 mongoDb 會導致問題,如果數據庫中有足夠的記錄,即使它是一個開發環境,節點垃圾收集器可能無法釋放內存,您將最終會導致一切都變慢的堆積。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.