[英]ENOMEM in Node.js caused by high virtual memory usage
幾個月來,我的生產 Node.js (v12) 應用程序中出現 ENOMEM 錯誤。
這個問題特別難以診斷,因為我的堆總是在 100MB 范圍內,並且不會隨着時間的推移而增加。 因此節點 memory 泄漏的可能性不大。
但是,有時 VIRT memory 使用量(由 top cmd 報告)高達 15-20GB,這時節點開始拋出一些“spawn: enomem”錯誤。
據我所知,即使堆穩定在 100MB,節點也會保留大量虛擬 memory。 而且我無法診斷它是什么,因為節點首次亮相工具只允許我檢查堆。
我在這個問題上花了將近 100 小時,所以任何見解/幫助將不勝感激!
我試過了:
謝謝你的幫助 !
我們設法解決了這個問題。 請記住,解決方案可能特定於我們自己的項目。
在大型文件數組(20k+)上使用 package“imagemin”和“imagemin-jpegtran”和“imagemin-pngquant”時,我們設法始終如一地重現錯誤,並等待所有承諾完成 promise.all() . VIRT 內存使用量飆升至 20GB+,執行后從未釋放。
我們的解決方案是使用plimit將並發 Promise 的數量限制為 5 或 10。在相同數量的圖像(20k+)上,VIRT 內存使用量從未上升,RES 也沒有上升,並且我們停止收到 ENOMEM 錯誤。
希望這可以幫助那里的人
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.