nodejs垃圾收集输出

任何人都知道我在哪里可以阅读关于nodejs中的–trace-gc选项的输出?

我不是要求解释gc是如何工作的,因为有很多关于它的信息,只是为了–trace-gc的输出。

我可以猜到一些领域的意义,但我不知道其他的。

例如 :

  • 括号内数字的含义是什么,
  • “步”meaining(这可能涉及到增量标记和懒惰扫)
  • 写入的堆的大小是整个堆? (增加年轻人和老年人)

一个例子 :

[12994] 77042 ms: Scavenge 260.7 (298.1) -> 247.7 (298.1) MB, 9.4 ms [allocation failure]. [12994] 77188 ms: Scavenge 261.7 (298.1) -> 249.0 (300.1) MB, 7.4 ms [allocation failure]. [12994] 77391 ms: Scavenge 263.8 (301.1) -> 250.6 (302.1) MB, 8.1 ms [allocation failure]. [12994] 77511 ms: Scavenge 264.8 (302.1) -> 251.8 (304.1) MB, 7.4 ms [allocation failure]. [12994] 77839 ms: Scavenge 273.4 (304.1) -> 260.7 (305.1) MB, 8.3 ms (+ 55.7 ms in 201 steps since last GC) [allocation failure]. [12994] 78052 ms: Scavenge 274.3 (305.1) -> 261.9 (307.1) MB, 8.2 ms (+ 54.4 ms in 192 steps since last GC) [allocation failure]. [12994] 78907 ms: Scavenge 277.3 (308.1) -> 264.2 (309.1) MB, 10.1 ms (+ 51.5 ms in 196 steps since last GC) [allocation failure]. [12994] 80246 ms: Mark-sweep 272.2 (310.1) -> 82.9 (310.1) MB, 45.2 ms (+ 195.4 ms in 690 steps since start of marking, biggest step 1.2 ms) [GC interrupt] [GC in old space requested]. [12994] 80868 ms: Scavenge 99.3 (310.1) -> 85.5 (310.1) MB, 6.5 ms [allocation failure]. [12994] 81039 ms: Scavenge 100.2 (310.1) -> 86.8 (310.1) MB, 6.9 ms [allocation failure]. [12994] 81455 ms: Scavenge 102.2 (310.1) -> 88.8 (310.1) MB, 5.5 ms [allocation failure]. 

UPDATE

看看创build输出的文件(由mtth提供),我将添加所有字段的解释,以防任何人感兴趣:

 [12994] 77042 ms: Scavenge 260.7 (298.1) -> 247.7 (298.1) MB, 9.4 ms [allocation failure]. [pid] <time_since_start> : <Phase> <heap_used_before (old+young)> (<allocated_heap_before>) -> <heap_used_after (old+young)> (<allocated_heap_after>) MB, <time_spent_gc> [<reason_of_gc>] 

另外,当旧的空间gcs(完整)之间有任何增量标记时,它会出现在扫描轨迹中,如下所示:

 (+ <incremental_time_duration> ms in <incremental_marking_steps> steps since last GC) 

当轨迹对应一个旧的空间gcs(满)时,它也显示最大的步长。

这个痕迹对应于nodejs 0.12.9,它们看起来至less在nodejs 4.2.2中相似

最接近我能find的文档是生成输出的函数的来源 。 使用gc-tracer.h的注释,我们可以计算出每个条目的含义。 例如:

  • 括号内数字的含义是什么?

parens中的数字表示从OS中分配的总内存(以前的是用于堆中对象的总内存)。