透過程式碼效能分析最佳化應用程式的效能

發布日期:2023/01/31

在監控應用程式效能或解決生產中的問題時,上下內容情境是關鍵。可用資訊越多,預防或偵測出影響用戶的問題的速度就越快。可觀察性工具中提供了許多不同的功能,例如程式碼效能分析 (code profiling),能幫助您透過內容情境分析資料。在本文中,我將討論什麼是程式碼效能分析,並用一個範例展示它的工作原理。


程式碼效能分析
程式碼效能分析可為工程師提供程式碼等級的可見性,以掌握資源瓶頸,幫助他們解決服務效能問題。工程師可以持續評量他們的程式碼如何影響 CPU 和記憶體使用情形並導致服務效能下降。在深入研究程式碼效能分析之前,我們先定義幾個專有名詞:

  • 呼叫堆疊 (call stack) - 呼叫堆疊是應用程式當前正在呼叫的函數/方法的列表
  • 堆疊追蹤 (stack trace) - 堆疊追蹤是呼叫堆疊中特定呼叫在特定時間點的快照,其中包含服務名稱、類別名稱、方法/函數名稱,以及程式碼行號等資訊。追蹤時也能將效能資料 (如時間和記憶體使用情況) 加進來一起收集
  • 追蹤 (trace) - 追蹤是一組代表一次交易的呼叫。通常用於追蹤一系列服務中的一次用戶交易
  • 跨度 (span) - 跨度是追蹤中的呼叫之一。


程式碼效能分析會從營運環境中收集呼叫堆疊,而代理程式會透過收集器定期將呼叫堆疊的快照發送到 APM 後端。然後,APM 解決方案會用圖表或火焰圖以視覺方式表示程式碼效能,幫助工程師了解程式碼是否效能不佳。


實作程式碼效能分析
透過 AlwaysOn Profiling® 工具提供程式碼效能分析功能。今年在 AWS re:Invent 大會上,參加 AWS GameDay 會議的與會者就在引導下使用 Splunk APM 和 AlwaysOn Profiling 識別並解決影響效能的程式碼問題。

GameDay 團隊展示了一個 Java Web 應用程式,其中包含一個長時間執行的呼叫。透過使用 Splunk APM 和設定 Splunk AlwaysOn Profiling 工具,團隊能夠確認這個程式碼問題,並具體找出該檔案和檔案中的特定行號。

在會議期間,團隊按照 Splunk Observability Cloud UI 中提供的指導快速設定了 Splunk APM。一旦用戶使用 OpenTelemetry 偵測他們的應用程式並將資料發送到 Splunk APM,團隊就能夠在幾分鐘內檢視應用程式指標、服務地圖和業務工作流程。

如需其他故障排除資訊,團隊則是輕鬆地透過啟動應用程式的命令列更新來執行 AlwaysOn Profiling。啟用 AlwaysOn Profiling 後,應用程式服務的呼叫堆疊就可為 Splunk APM 所用。

然後,團隊就能夠排除故障,並找出影響應用程式效能的長時間執行呼叫。AlwaysOn Profiling 會以表格和火焰圖向團隊顯示呼叫堆疊的資訊。呼叫堆疊中提供了特定服務流量中程式碼使用的各個方法和呼叫。


在左側的表格中,我們可以看到執行方法的名稱、執行該呼叫所花費的時間,以及該呼叫在呼叫堆疊中出現的次數。團隊立即就能看出有一個長時間執行的睡眠呼叫。透過選擇和展開睡眠呼叫,我們可以看到其中一個追蹤比其他追蹤花費的時間更長。

 

選擇這個執行時間最長的睡眠呼叫後,團隊能夠在右側看到此呼叫的堆疊追蹤。堆疊追蹤顯示長時間執行的呼叫發生在位於第 36 行的 DoorChecker.java 中的預檢方法中。確定問題後,團隊就能夠更改程式碼以更新應用程式,並修正這個長時間執行的呼叫。

使用啟用了 AlwaysOn Profiling 的 Splunk APM 能幫助團隊快速識別、定位和解決問題。應用程式問題或許不總是像系統停機那樣簡單,但效能不佳也會導致客戶不滿意。透過使用 APM 和程式碼效能分析工具,您可以獲得效能和程式碼等級的洞察力,更快地解決問題並最佳化應用程式的程式碼。

AlwaysOn Profiling 功能目前可用於 Java、.NET 和 Node.js 應用程式,未來會支援更多程式語言。沒有支援效能分析的自動檢測也可用於 Go 和其他幾種語言。若要親自體驗程式碼效能分析的速度和強大功能,請免費試用 Splunk Observability Cloud


作者
Margaret Ball
Margaret 是 Splunk 的一名可觀察性從業人員。在加入 Splunk 之前,Margaret 專注於技術營運領域的應用程式效能監控、資料可觀察性和問題排除。Margaret 擁有美國西沃恩南方大學的電腦科學學士學位。

 

返回上一頁