Eug*_*rks 2 javascript garbage-collection memory-management v8 node.js
我的节点服务器崩溃并显示以下日志。
<--- Last few GCs --->
504158 ms: Mark-sweep 1379.9 (1434.3) -> 1379.0 (1434.3) MB, 1486.7 / 0.0 ms [allocation failure] [GC in old space requested].
505610 ms: Mark-sweep 1379.0 (1434.3) -> 1379.0 (1434.3) MB, 1452.0 / 0.0 ms [allocation failure] [GC in old space requested].
507067 ms: Mark-sweep 1379.0 (1434.3) -> 1379.0 (1406.3) MB, 1456.1 / 0.0 ms [last resort gc].
508505 ms: Mark-sweep 1379.0 (1406.3) -> 1379.0 (1406.3) MB, 1438.3 / 0.0 ms [last resort gc].
Run Code Online (Sandbox Code Playgroud)
我了解 Mark-sweep 是一种 GC 算法。之后我们如何解释这些数字“1379.9 (1434.3) -> 1379.0 (1434.3) MB, 1486.7 / 0.0 ms”?
小智 5
这些是在 GC 标记扫描结束时报告的指标(通过,标记为删除,然后扫描标记的项目)。这两个数字是开始和结束的总对象大小和总内存大小。
所以一开始你的总对象大小是 1379.9,你的总内存大小是 1434.4 MB。最后,您的总对象大小为 1379.0,总内存大小为 1434.3 MB。因此释放了 0.9 MB。
我不是 100% 确定时间,但我相信第一个是花费的总外部时间(这似乎是在某些“范围”中花费的总时间)
这是你想要的源代码:https : //github.com/nodejs/node/blob/de732725d8ae232d7b6d56927ea8bef471d5bf1d/deps/v8/src/heap/gc-tracer.cc#L481
关于花费的外部时间:https : //github.com/nodejs/node/blob/de732725d8ae232d7b6d56927ea8bef471d5bf1d/deps/v8/src/heap/gc-tracer.h#L368