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 自定義分析