node.js --trace-gc输出的含义是什么?

时间:2015-11-16 22:56:24

标签: node.js garbage-collection

当使用--trace-gc选项

时,我得到node.js的输出
[24851]      852 ms: Scavenge 26.8 (57.2) -> 20.8 (58.2) MB, 3.1 ms [allocation failure].
[24851]      927 ms: Scavenge 28.7 (58.2) -> 22.4 (59.2) MB, 2.0 ms [allocation failure].
[24851]     1013 ms: Scavenge 30.4 (61.2) -> 24.1 (61.2) MB, 2.3 ms [allocation failure].
[24851]     1067 ms: Scavenge 31.6 (62.2) -> 24.8 (62.2) MB, 2.1 ms [allocation failure].
[24851] Speed up marking because marker was not keeping up
[24851] Postponing speeding up marking until marking starts
[24851] Speed up marking because marker was not keeping up
[24851] Postponing speeding up marking until marking starts
[24851] Speed up marking because marker was not keeping up
[24851] Postponing speeding up marking until marking starts
[24851]     1359 ms: Mark-sweep 90.9 (115.1) -> 53.6 (113.7) MB, 9.0 ms (+ 19.3 ms in 105 steps since start of marking, biggest step 1.7 ms) [GC interrupt] [GC in old space requested].
[24851]     1578 ms: Scavenge 69.6 (113.7) -> 62.4 (115.7) MB, 6.0 ms [allocation failure].
[24851]     1676 ms: Scavenge 73.1 (117.7) -> 64.1 (121.7) MB, 5.9 ms [allocation failure].

有人可以解释上面输出中每个项目的含义吗?

2 个答案:

答案 0 :(得分:0)

我还没有看到任何关于此的文档,但是查看process.memoryusage()的结果以及使用--trace_gc选项建议:

Scavenge <heapUsed before> (<heapTotal before>) -> <heapUsed after> (<heapTotal after>) MB, <how long the GC pause was>

process.memoryusage()heapUsedheapTotal有点记录,但更好地解释了by this answer

答案 1 :(得分:0)

那时,当您使用垃圾收集器监视内存分配和CPU使用率时,需要使用node --trace_gc server.js启动服务器,需要继续运行Activity Monitor => Memory => Search node,您可以看到有多少内存实际上是由节点处理使用的,现在当您在上面的命令中触发时,您可以在控制台中看到许多日志。这些日志中主要有两个要注意的因素是ScavengeMark-sweep。如果仅在日志中处理Scavenge,则表明它是正常的内存使用量...但是,当Mark-sweep出现时,则表明该处正在运行一些CPU密集型任务,这导致CPU使用率和内存分配较高。基本上,发生这种情况是在执行一些代码时阻止了当前堆栈,这些代码在同步过程完成后将从堆栈中弹出。为了避免Mark-sweep,您需要使函数异步。希望你能明白我的意思!