2020年8月11日 星期二

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

上星期老闆請我幫忙評估網路磁碟機使用量的問題,趁著昨天有空趕快寫支小工具依副檔名來計算哪些種類的檔案佔了多數?

原本昨天是輸出至純文字檔再餵進 EXCEL 加工,反正一次性的工具先求有比較重要。

早上實驗完後有一些空檔時間,乾脆把工具改成直接輸出到 EXCEL,後續只要改格式就好。沒想到再 parsing 第二個較佔空間的資料夾時,發生了 out of memory 的問題。

解決之道便是加上啟動參數

node --max-old-space-size=4096 yourFile.js

另外底下是相關的測試數據,留待以後相關工作參考



2020/08/14 更新

上面時間,我有稍微優化過,有減少第二階段的時間。

2020/08/19 更新

上禮拜有看到一套現成的軟體,可惜商業使用要錢。今天剛好又看到了另外一套軟體 WinDirStat,其實就是做了我程式做的功能,試了一下,速度比我未優化的 Node.js 的 Code 還快,如果上禮拜我是用 Golang 來寫,應該跟它有一拼的實力才對,據我用工作管理員觀察的結果,WinDirStat 的工作數據如下:

最高 CPU 使用率 - 6%
最大執行緒數量 - 3
最高記憶體使用量 - 44M

我的 Node.js 未優化 Code 工作數據如下:

最高 CPU 使用率 - 40%
最大執行緒數量 - 11
最高記憶體使用量 - 500M(Third party Excel module)

有這樣的數據其實並不意外,第一我為了保留原始資料,用了好幾組 Array,等於我在後面整理資料時,又把這個數據跑了一遍,如果 N 很大,其實很嚇人。第二這裡是純粹使用遞迴瀏覽檔案資料夾,沒有用到 IO Bound 的優勢,完全是吃 CPU 資源。

另外,這套軟體還是 Open Source,只能給它一個讚。

沒有留言:

張貼留言