从Node.js分析核心转储的工具

Dav*_*son 19 heap instrumentation coredump node.js

如果我使用gcore来创建Node.js进程的代码转储,那么分析它的最佳工具是什么?

灵感来自: 分析java核心转储的工具

在我的具体情况下,我有兴趣调查一些内存泄漏,所以我真的很想得到一些堆分析.一般工具甚至仪器包和技术也是受欢迎的.我发现Node.js非常有趣,但运行时分析工具还没有.

Dav*_*son 16

为了调查崩溃,我发现node-segfault-handler非常有用.它是一个模块,我在一个信号硬崩溃的情况下得到一个本机代码堆栈跟踪 - 例如,导致SIGSEGV的NULL的deref

为了调查内存/分配问题,这里是我迄今为止收集的一些数据:

1)Dave Patheco的博客文章 - 作者谈到使用插件到MDB获取JS堆栈等.可悲的是,据我所知,该插件的来源从未发布过(也没有任何二进制形式).

2)动态环境中的事后调试 - ACM Queue文章也由Dave Patheco撰写(链接自博客文章).虽然它有很好的背景阅读,但文章中没有很多具体的工具和技术.

3)node-panic - 一个纯JS工具,用于在发生断言失败类型崩溃时转储状态.什么都没有帮助调试源自本机代码错误(SIGSEGV等)的崩溃

4)Joyent:调试生产系统 - 由Bryan Cantrill谈论他推荐的工具和技术(thx crickeys).


H. *_*yer 8

在Linux和Mac上,您可以使用llnode lldb调试器的插件.该项目在github上的nodejs组织下可用:

https://github.com/nodejs/llnode

您可以通过github从源代码安装或在Mac上使用brew.github上的自述文件可以帮助你安装它,这里有一篇介绍性的博客文章:

https://developer.ibm.com/node/2016/08/15/exploring-node-js-core-dumps-using-the-llnode-plugin-for-lldb/

最初的问题是关于内存分析,v8 findjsobjectsv8 findjsinstances命令将通过生成对象计数的基本直方图并允许您列出每种类型的实例来帮助实现.

这里有一篇关于使用llnode进行内存分析的完整文章:http://www.brendangregg.com/blog/2016-07-13/llnode-nodejs-memory-leak-analysis.html