【发布时间】:2019-03-19 13:11:34
【问题描述】:
我试图找出导致以下代码迭代期间内存使用量显着增加的原因。
async function a () {
for (let i = 0; i < 10000000000; i++) {
await new Promise(resolve => {
if (i%100000 === 0) {
console.log(i)
console.log(process.memoryUsage())
}
resolve(i)
})
}
}
a()
随着代码的运行,这种内存使用跳跃会发生多次,并且总是在 i 达到某些特定数字时发生。
在 7.9.0 中,总是发生在 2000000 -> 2100000
1700000
{ rss: 20135936, heapTotal: 9355264, heapUsed: 6003256, external: 8772 }
1800000
{ rss: 19836928, heapTotal: 9355264, heapUsed: 4490432, external: 8772 }
1900000
{ rss: 19316736, heapTotal: 9355264, heapUsed: 5039992, external: 8772 }
<-- Jump happens between here -->
2000000
{ rss: 19357696, heapTotal: 9355264, heapUsed: 5587808, external: 8772 }
2100000
{ rss: 23605248, heapTotal: 13549568, heapUsed: 6088208, external: 8772 }
<-- and here -->
2200000
{ rss: 23601152, heapTotal: 13549568, heapUsed: 6586000, external: 8772 }
2300000
{ rss: 23568384, heapTotal: 13549568, heapUsed: 7083112, external: 8772 }
在 8.3.0 中,总是发生在 2600000 -> 2700000
2400000
{ rss: 30507008, heapTotal: 9437184, heapUsed: 4785896, external: 8252 }
2500000
{ rss: 30523392, heapTotal: 9437184, heapUsed: 4710912, external: 8252 }
<-- Jump happens between here -->
2600000
{ rss: 30539776, heapTotal: 9437184, heapUsed: 4636176, external: 8252 }
2700000
{ rss: 34742272, heapTotal: 13631488, heapUsed: 6606512, external: 8252 }
<-- and here -->
2800000
{ rss: 34750464, heapTotal: 13631488, heapUsed: 8571208, external: 8252 }
2900000
{ rss: 34758656, heapTotal: 13631488, heapUsed: 6412304, external: 8252 }
【问题讨论】:
-
两个屏幕截图是一样的吗?
-
我提供了 2 个新的屏幕截图,更清楚地显示了显着增加。这两个屏幕截图显示了在 nodejs7.9 和 nodejs8.3 中运行的结果。无论我尝试多少次,RSS 跳转都会发生在同一个版本中的相同计数处。
-
这是你的程序的范围吗?或者在这个循环的同时还有其他东西在运行吗?如果还有更多,你能把它贴出来(或者如果它太大的话,请描述它)?
-
只需复制粘贴代码并在节点中运行,然后观察 RSS。