NodeJS,PM2,GC,Grafana - 更好地理解

时间:2017-04-10 14:48:04

标签: node.js memory-leaks garbage-collection

我想在Nodejs / V8中更好地解决GC过程。

您能否提供以下问题的一些信息:

  • 当GC被触发时,是否会阻止节点js的事件循环?

  • GC是在自己的进程中运行还是只是事件循环的一个子方法?

  • 当通过Pm2(聚集模式)生成nodejs进程时,实例 真的有它自己的进程或者是GC之间共享的 实例?

  • 对于记录用途我正在使用Grafana (https://github.com/RuntimeTools/appmetrics-statsd),有人可以 解释差异\有关这些仪表的更多细节:

    gc.size JavaScript堆的大小(以字节为单位)。

    gc.used以JavaScript为单位使用的JavaScript堆内存量。

Memory usage

  • 是否有任何情况下GC不会释放与压力测试相关的内存(gc.used)?

这些问题与我目前面临的问题有关。 GC的已用内存正在上升,不会释放任何内存(经典内存泄漏)。问题是它只在我们提出很多请求时出现。

我使用max-old-space-size来避免pm2重启,但看起来GC已经不再自由了,整个应用程序变得非常慢......

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

好的一些问题,我已经想通了:

gc.size =总堆大小(https://nodejs.org/api/v8.html - > getHeapStatistics),

gc.used = used_heap_size

当gc_size击中一个不再下降的平台时,它看起来没问题=>

Memory usage doesn't decrease in node.js? What's going on?

答案 1 :(得分:0)

为什么垃圾收集很贵? V8 JavaScript引擎采用了世界各地的垃圾收集器机制。实际上,这意味着程序在垃圾收集过程中停止执行。

https://blog.risingstack.com/finding-a-memory-leak-in-node-js/