OpenResty XRay Supported Tech Stacks: CPU Flame Graphs and Memory Analysis for LuaJIT, C/C++, Rust, Java, Go, Python, Node.js, PHP, Erlang, Perl, Ruby and the Linux Kernel

支援的技術棧

你的剖析工具止步於技術棧邊界,OpenResty XRay 不會。

OpenResty XRay 在同一條呼叫棧裡剖析你的應用語言、底層系統庫與核心。以下是完整的技術棧支援矩陣,逐一標註各技術棧的分析深度。

預約演示
預約演示

完整支援矩陣

技術棧CPU 火焰圖記憶體分析更多
LuaJIT / Lua
(OpenResty, Nginx, Kong)
Supported含 Lua↔C 混合棧引用鏈級 — GC 物件引用、分配路徑相關文章 →
C / C++Supported精確到原始碼行分配器級 — 洩漏檢測、記憶體碎片相關文章 →
RustSupported分配器級相關文章 →
JavaSupported引用鏈級 — GC 引用分析,無 stop-the-world 停頓相關文章 →
GoSupported引用鏈級相關文章 →
PythonSupported深入直譯器內部引用鏈級相關文章 →
Node.jsSupported引用鏈級相關文章 →
PHPSupported引用鏈級相關文章 →
ErlangSupported視工作負載而定 †相關文章 →
PerlSupported引用鏈級相關文章 →
RubySupported視工作負載而定 †—
作業系統核心Supported獨立核心火焰圖網路協議棧、程序排程器、系統呼叫分析相關文章 →

引用鏈級 = OpenResty XRay 遍歷 GC 物件引用關係,指出是誰持有了洩漏的記憶體,並給出分配程式碼路徑。 分配器級 = 洩漏檢測、記憶體碎片與分配器行為分析,不含物件引用鏈——前者定位到”哪個物件持有了不應釋放的記憶體”,後者發現”記憶體總量在持續增長”。

† 記憶體分析深度視工作負載而定

Erlang 和 Ruby 完整支援 CPU 剖析。記憶體分析的深度取決於具體的工作負載和執行時版本。告訴我們你的技術棧,我們會在部署之前說明針對你的環境能達到的確切分析深度。

一個 Agent,三層覆蓋,一條呼叫棧

OpenResty XRay 從外部接入正在執行的程序——不改程式碼、不重啟、不預載入任何庫。每一次取樣都會貫穿三層進行棧展開與符號化,合成一條連續的呼叫棧。

第 1 層 · 應用層

深入直譯器與 JIT 內部

OpenResty XRay 直接解析執行時自身的內部資料結構——LuaJIT、CPython、JVM、Go、PHP、Node.js、Erlang、Perl、Ruby——還原出你的原始檔和程式碼行,而不只是直譯器的 C 函式幀。

第 2 層 · 系統層

解析底層系統庫

C、C++ 和 Rust 幀——nginx、OpenSSL、glibc 以及你自己的模組——即使是去除了符號的生產環境二進位制,也能借助中央符號庫完成符號化。

第 3 層 · 核心層

直達核心

排程器、網路協議棧、記憶體管理和系統調用出現在同一條呼叫棧裡,因此阻塞在核心中的 off-CPU 時間可以歸因到發起等待的應用程式碼。

生產環境實案

跨越語言邊界的真實診斷

44.8% CPU

libcrypto 中的 pkey_rsa_decrypt 消耗了將近半個核的 CPU。OpenResty XRay 順著 JWT 庫一路回溯到某個 Lua 外掛的第 93 行——這條跨語言呼叫鏈是 perf 無法呈現的。

閱讀診斷過程 →
無 STW 停頓

JVM 堆在多次 Full GC 之後仍持續增長。OpenResty XRay 在執行中的 JVM 上遍歷 GC 物件引用鏈,定位到持有記憶體的資料結構——無需 heap dump,沒有 stop-the-world。

閱讀診斷過程 →
100% CPU,現場

B 站一次生產事故中,所有 worker 程序 CPU 達到 100%。分析是在事故發生期間直接針對執行中的程序完成的,而不是事後搭建復現環境。

閱讀事故覆盤 →
“OpenResty XRay 的故障排除和效能最佳化功能顯著地提高了我們的生產力,使我們能夠精準定位生產環境中各類的詭異問題。 ”
— Jun Xiao | Site Manager
FAQ

常見問題

需要除錯符號或重新編譯應用嗎?

不需要。對於主流發行版的軟體包,OpenResty XRay 從中央符號庫解析符號;對於改動過的開源軟體構建,OpenResty XRay 會近似重建符號;對於你自己的私有二進位制,OpenResty XRay 可以自動提取符號,也可以接受上傳的 RPM/DEB 包。你的生產構建保持原樣。

可以。每一次取樣得到的呼叫棧都會跨越三層展開並完成符號化,所以一張火焰圖裡同時包含你的應用幀、其下的 C 幀,以及再往下的核心幀。正因如此,一個吃 CPU 的 C 函式才能被歸因回撥用它的那一行應用程式碼。

OpenResty XRay Agent 執行在宿主機上,需要 root 許可權和一個核心模組。你的應用進程不會被修改:不注入任何程式碼、不預載入任何庫;沒有分析任務執行時,與應用程序完全沒有接觸。僅支援 Linux 伺服器;容器場景下,宿主機上的 Agent 可以分析該主機上所有容器內的程序。

你的技術棧就在矩陣裡。瞭解它在 XRay 下的全貌。

告訴我們你的技術棧,我們會在部署前說明針對你的環境能達到的確切分析深度。

預約演示