最小復(fù)現(xiàn)代碼:test.jsfunction sleep(delay) { return new Promise(resolve => setTimeout(resolve, delay));
}const _ = require('lodash');async function doTask() { // console.log('start');
await sleep(_.random(10, 30)); // console.log('done');}async function start() { await sleep(3); await doTask(); await start(); // 去掉前面的await就好了}
start();
setInterval(() => { console.log(process.memoryUsage());
},10e3);進(jìn)程啟動的時候rss是22M,運行了1個多小時后內(nèi)存占用達(dá)到了380M PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30211 devel 20 0 1229m 381m 10m S 1.0 9.6 1:36.63 node test.js# 在start函數(shù)的遞歸調(diào)用中取消await21729 devel 20 0 867m 23m 10m S 1.0 0.6 1:22.73 node test.js# 改成循環(huán)14498 devel 20 0 867m 24m 10m S 1.0 0.6 1:11.04 node test.js雖然確定是在遞歸調(diào)用的時候前面多加了個await,但是能解釋下原因么,是我使用的姿勢不對么
1 回答

慕沐林林
TA貢獻(xiàn)2016條經(jīng)驗 獲得超9個贊
下一次start調(diào)用的時候,前一次的promise對象并沒有銷毀,所以每次都會產(chǎn)生一個新的promise對象,內(nèi)存可不就泄露了嗎
- 1 回答
- 0 關(guān)注
- 705 瀏覽
添加回答
舉報
0/150
提交
取消