Nodejs coredump 文件用什么分析
Nodejs coredump 文件用什么分析
线上有一些 node 生成的 coredump 文件,大小为 1.6G
所以大神们是用什么工具分析在线上分析这些 coredump 文件的
我想要的信息是:
- 哪个进程产生的 coredump
- 哪些对象导致内存溢出了
用 gdb 看。
C 用 gdb , nodejs 的我不清楚
有一个很慌的事情是,我现在不知道生成的那些 core.xxx 的 1.6G 的文件是 heapdump 还是 coredump
> 哪个进程产生的 coredump
这个问题我解决了,用file
命令就能看
core.xxx 是 coredump ,一般那个 xxx 里含有 pid ,取决于你的 core pattern 怎么定义的。
可以用 gdb 看或者 lldb 看, bt 能看到启动命令和线程,需要加载对应的 node 二进制才能看到详细的 C++的堆栈(否则只能看到 mangled 过的名字)。 V8 的情况( JS 堆栈和堆上对象统计一类的东西)可以用 mdb_v8 或者 llnode 看到,因为是 JIT 编译的,不用这些插件读不了 JS 引擎里的东西。
针对Node.js的coredump文件分析,通常可以使用以下几种工具:
-
LLDB与llnode:
LLDB是LLVM的调试器,而llnode是一个为LLDB提供JavaScript和Node.js特定调试功能的插件。通过llnode,你可以更方便地检查JavaScript堆栈、对象、源代码等。
安装llnode后,你可以在LLDB中使用如下命令来分析coredump文件:
lldb node <coredump文件路径>
然后在LLDB中使用llnode提供的命令,如
v8 bt
(回溯Node函数及其参数)、v8 source list
(查看源代码)等。 -
GDB:
GNU调试器GDB是查看coredump文件的经典工具。你可以使用GDB加载coredump文件和对应的可执行文件,然后使用
bt
命令查看函数调用栈信息。gdb <程序名> <coredump文件路径> bt
-
其他工具:
除了LLDB和GDB,你还可以使用如Crash(针对内核崩溃)、Valgrind(主要用于内存检查,但也可用于分析coredump)等工具。
需要注意的是,分析coredump文件可能需要大量的磁盘空间和计算资源,特别是在处理大型Node.js应用时。同时,coredump文件可能包含敏感信息,因此在处理时需要格外小心,确保遵守相关法律法规并保护用户隐私。