当Node.js进程因内存不足而崩溃时,如何理解日志

3

我的Node服务器出现以下日志并崩溃。

<--- 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].

我知道Mark-sweep是一种垃圾回收算法。那么在这之后,我们如何解释这些数字“1379.9(1434.3) -> 1379.0(1434.3) MB,1486.7 / 0.0 ms”?

1个回答

7
这些是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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接