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