cnpm/cnpmcore

cacheKeyNormalize 存在性能问题

fengmk2 opened this issue · 10 comments

image

node_modules/_tar@6.2.0@tar/lib/unpack.js
node_modules/_tar@6.2.0@tar/lib/normalize-unicode.js

长期方案

  • 使用 compressing 或者 tar-stream 代替

normalizeCache 的 key 每次 tar unpack 之后都会递增。
image

ezm headdump 也抓到了
image

从内网之前的分析来看,堆内内存占用并不大,主要是堆外占用很大,而堆外大部分都是碎片内存。

也就是说,在 unpack 之后,在 normalizeCache 对象储存了大量的 key-value 对,但是由于存在少量 key/value 仍然被后续的程序使用(猜测)导致整个 normalizeCache 对象都没有被释放,这里说的没释放是没有释放给系统,被 ptmalloc 的 main arena 给保留了,原因是 top chunk 附近存在未回收内存。

经历了多次 unpack 后,堆外内存就暴涨了。泄露的不是 heap,是 mm 区。

从内网之前的分析来看,堆内内存占用并不大,主要是堆外占用很大,而堆外大部分都是碎片内存。

也就是说,在 unpack 之后,在 normalizeCache 对象储存了大量的 key-value 对,但是由于存在少量 key/value 仍然被后续的程序使用(猜测)导致整个 normalizeCache 对象都没有被释放,这里说的没释放是没有释放给系统,被 ptmalloc 的 main arena 给保留了,原因是 top chunk 附近存在未回收内存。

经历了多次 unpack 后,堆外内存就暴涨了。因此泄露的不是 heap。

这个不是的,这个是真的 heap 泄漏,js 代码实现问题。

这个不是的,这个是真的 heap 泄漏,js 代码实现问题。

那就是存在不止一个问题咯