【问题标题】:What is meaning of node.js --trace-gc output?node.js --trace-gc 输出的含义是什么?
【发布时间】:2015-11-16 22:56:23
【问题描述】:

当使用 --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].

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

【问题讨论】:

标签: node.js garbage-collection


【解决方案1】:

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

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

heapUsedheapTotal 在哪里被 process.memoryusage() 记录,但更好地解释 by this answer

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 知道如何在文件中而不是标准输出中捕获这些日志吗?
    • node --trace_gc app/index.js &gt; out.log 可能是个技巧,或者您可以使用pm2 并掠夺到 $HOME/.pm2/logs
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    相关资源
    最近更新 更多