Core Dump 分析

OpenResty XRay 支持分析由 OpenResty 和 C/C++ 应用产生的 core 文件,可以帮助定位程序异常崩溃的原因。

如下图所示,该功能入口位于:

要开始分析 core 文件,首先要选择 core 文件对应的应用类型。系统会根据应用类型自动筛选出相应的标准分析器列表。

例如,如果要分析由 OpenResty 生成的 core 文件,我们就可以选择 OpenResty 应用类型,并且选择 openresty-core-dump-analysis 分析器。

接下来,在输入框中填写 core 文件在 agent 所在机器上存放的位置(绝对路径)。

填写完成后,我们的 agent 会到目标机器上检查这个 core 文件,下方会显示出 core 文件的相关信息,并自动填充产生该 core 文件的可执行文件路径。

注意:我们会从 core 文件中自动提取其中的 Build ID(是用来标识二进制文件的唯一 ID)列表。如果检查发现提取的信息不完整,那么还需要按照界面提示执行 orxray-get-buildid.py 脚本提取出 Build ID 列表,并将脚本输出填入到 Build IDs 处。这种情况一般是使用了低版本的 gcore 工具生成的 core 文件,可以尝试使用随 agent 安装的 /usr/local/openresty-gdb/bin/gcore 工具生成。

点击分析按钮,运行成功后下方就会输出命令结果。

除了通用性较强的分析器外,我们还提供了一些针对特定场景或需求的分析器。

例如,如果我们想要查看 core 文件中 LuaJIT 的 GC 对象内存引用情况,可以选择 lj-gco-ref 分析器,并点击分析按钮。系统会从 core 文件中提取并生成 GC 对象内存引用火焰图。

如果我们想要查看当前运行的 Lua 线程的调用栈,可以选择 lj-running-threads 分析器。

我们已经提供了多种常见场景下可使用的标准分析器。但是,在某些特殊情况下(如 core 文件由闭源 C 应用生成),用户可能需要自己编写自定义分析器来满足个性化需求,请参考 Core Dump 自定义分析