記憶體

在這份文件中,您可以學習如何除錯與記憶體相關的問題。

我的流程耗盡了記憶體

Node.js (JavaScript) 是一種垃圾回收語言,因此可能會發生記憶體洩漏的情況,主要是透過保留器。由於 Node.js 應用通常是多租戶、業務關鍵且長時間運行的,因此提供一種可靠且有效的尋找記憶體洩漏的方式至關重要。

症狀

使用者持續觀察記憶體使用量持續增加(可能快速或緩慢,持續數天甚至數週),然後看到進程因記憶體耗盡而崩潰並由進程管理器重新啟動。進程可能運行速度比以前慢,且重新啟動會導致某些請求失敗(負載平衡器以502回應)。

副作用

  • 由於記憶體耗盡而導致進程重新啟動,並導致請求被丟棄
  • 增加的GC活動導致較高的CPU使用率和較慢的響應時間
    • GC阻塞事件循環導致進程變慢
  • 增加的記憶體交換減慢進程(GC活動)
  • 可能沒有足夠的可用記憶體來獲取堆快照

我的進程使用記憶體效率低下

症狀

應用程式使用了意外的記憶體量和/或我們觀察到提高的垃圾回收器活動。

副作用

  • 提高的頁面錯誤數量
  • 更高的GC活動和CPU使用率

調試

大多數記憶體問題可以通過確定我們特定類型對象占用多少空間以及阻止它們被垃圾回收的變量來解決。了解我們程序隨時間的分配模式也可能有助於解決問題。