我想在Nodejs / V8中更好地解决GC过程。
您能否提供以下问题的一些信息:
当GC被触发时,是否会阻止节点js的事件循环?
GC是在自己的进程中运行还是只是事件循环的一个子方法?
当通过Pm2(聚集模式)生成nodejs进程时,实例 真的有它自己的进程或者是GC之间共享的 实例?
对于记录用途我正在使用Grafana (https://github.com/RuntimeTools/appmetrics-statsd),有人可以 解释差异\有关这些仪表的更多细节:
gc.size JavaScript堆的大小(以字节为单位)。
gc.used以JavaScript为单位使用的JavaScript堆内存量。
这些问题与我目前面临的问题有关。 GC的已用内存正在上升,不会释放任何内存(经典内存泄漏)。问题是它只在我们提出很多请求时出现。
我使用max-old-space-size来避免pm2重启,但看起来GC已经不再自由了,整个应用程序变得非常慢......
有什么想法吗?
答案 0 :(得分:0)
好的一些问题,我已经想通了:
gc.size =总堆大小(https://nodejs.org/api/v8.html - > getHeapStatistics),
gc.used = used_heap_size
当gc_size击中一个不再下降的平台时,它看起来没问题=>
答案 1 :(得分:0)
为什么垃圾收集很贵? V8 JavaScript引擎采用了世界各地的垃圾收集器机制。实际上,这意味着程序在垃圾收集过程中停止执行。
https://blog.risingstack.com/finding-a-memory-leak-in-node-js/