我正在努力跟踪node.js应用程序中的内存泄漏,而且我一直在弄乱像node -trace-gc这样的东西。但我很好奇是否有一些节点编译选项或其他技巧使节点注销不仅仅是它在垃圾收集中做了什么,而是引用了它的标记,扫描和压缩。知道这些引用是什么将有助于我们识别仍被标记为可达的事物,特别是当我们不期望它们时。
我在node.js的文档中寻找线索,但没有找到多少。我通常会在很多好的博客文章中找到答案,但我的下一步是下载代码并进行一些阅读。
我一直在使用https://www.npmjs.com/package/memwatch#heap-diffing的堆差异。有点有用,但仍然缺乏。我有一个字符串某处泄漏:
{ before:
{ nodes: 144924,
time: Tue Apr 12 2016 17:56:57 GMT+0000 (UTC),
size_bytes: 16739240,
size: '15.96 mb' },
after:
{ nodes: 177032,
time: Tue Apr 12 2016 18:22:37 GMT+0000 (UTC),
size_bytes: 25575708,
size: '24.39 mb' },
change:
{ size_bytes: 8836468,
size: '8.43 mb',
freed_nodes: 1357,
allocated_nodes: 33465,
details:
[ { '+': 1,
what: 'Arguments',
size_bytes: 0,
size: '0 bytes',
'-': 1 },
{ '+': 296,
what: 'Array',
size_bytes: 12312,
size: '12.02 kb',
'-': 263 },
{ '+': 4,
what: 'Closure',
size_bytes: 36,
size: '36 bytes',
'-': 3 },
{ '+': 41,
what: 'Code',
size_bytes: 26144,
size: '25.53 kb',
'-': 4 },
{ '+': 2, what: 'Date', size_bytes: 0, size: '0 bytes', '-': 2 },
{ '+': 1, what: 'Native', size_bytes: 0, size: '0 bytes', '-': 1 },
{ '+': 4, what: 'Number', size_bytes: 0, size: '0 bytes', '-': 4 },
{ '+': 112,
what: 'Object',
size_bytes: -932,
size: '-932 bytes',
'-': 159 },
{ '+': 1,
what: 'SlowBuffer',
size_bytes: 0,
size: '0 bytes',
'-': 1 },
{ '+': 32974,
what: 'String',
size_bytes: 8797164,
size: '8.39 mb',
'-': 910 },
[length]: 10 ] } }