使用NodeJS開發的應用,如果需要處理大量數據,可能導致堆溢出。錯誤提示中,會有“JAVAScript heap out of memory”,如下圖:
通過調試分析,會發現:在出錯之前,其使用的內存量是一直增大的:
如本例測試時,起初:
中途,內存用量一直增長:
當內存使用量超過約2048MB后,即會出錯。
這個問題的原因,是由于NodeJS在啟用時,默認使用的內存量是受限的,大約是2GB。
在代碼中,通過v8的getHeapStatistics方法,可以取得此值。
如果想要獲得更大的內存,則需解除此封印。方法是:在Node啟動程序時,使用max-old-space-size參數,設定一個更大的值。
如,設定可用內存是8GB:
本測試,使用的是用于JS代碼加密的JShaman平臺本地版。未設定內存值之前 ,在加密某個大型JS文件時,會出現本文最前面的錯誤。在設定為8GB內存用量后,則運行正常。效果如下圖:
本方法,在node12下測試通過: