13 分析軟件以調試應用程序性能問題
已發表: 2021-04-10您的應用程序的目的是為您的最終用戶提供良好的服務。
它必須快速、響應迅速、易於使用和可靠,以及其他所需的功能。
但是,以不斷提供頂級性能的方式維護您的軟件並不容易。
當您的代碼開始調用不必要的函數、自行跳轉、捕獲錯誤並進入額外循環時,可能會導致效率低下。 您的應用程序可能會變得緩慢、無響應或行為不正常。
如果您不解決這些問題,整體應用程序性能就會受到影響。
因此,您的客戶可能會因為性能不佳和速度緩慢而感到惱火或完全停止使用您的應用程序。 它不僅會降低您的聲譽,還會使您在收入和利潤方面付出代價。 因此,您的代碼需要進行分析、審查和調試,以實現最佳性能。 快速的方法是使用軟件分析工具來監視和調試代碼並消除與性能相關的瓶頸。
在本文中,您將了解軟件分析以及它如何為您提供幫助。 然後,我將向您介紹一些最好的分析工具來調試您的應用程序並優化其性能。
什麼是軟件分析?
軟件分析是一種動態代碼分析,其中使用程序運行時收集的數據調查程序的行為。 它旨在確定您必須優化的各種程序部分,以提高應用程序速度、響應能力並減少其內存和資源消耗。

軟件分析器通常測量函數調用的持續時間和頻率,以及與程序相關的內存或時間複雜度。 還有特定的分析器可用,如內存分析器。
分析通常通過檢測程序的源代碼來執行。 探查器可以使用不同的探查技術,例如檢測方法、基於事件的方法、統計方法或模擬方法。
為什麼軟件分析很重要?
需要軟件分析來確定與特定功能相關的資源使用情況和執行時間。 它有助於優化程序的速度,同時確保它消耗最少的資源。
此外,它還可以跟踪和優化 CPU 使用率和命令執行時間。

因此,必須選擇正確的軟件分析工具,以確保您可以更快地調試與性能相關的問題,從而提高其效率並提供更好的最終用戶體驗。 許多分析器還附帶詳細的報告、交互式圖形和可視化,可幫助您找到問題的確切根本原因,從而更輕鬆地解決問題。
因此,這裡列出了一些您可以嘗試的最佳軟件分析器,並告訴我們哪些最適合您。
間諜
py-spy 是一個出色的 Python 採樣分析器。 這使您可以先睹為快,了解基於 Python 的應用程序花費的時間。
為此,您不必修改代碼或完全重新啟動程序。 py-spy 涉及低開銷,並在 Rust 中開發以執行更高的速度。 它不是為了在您的基於 Python 的分析程序運行的同一進程中運行而構建的。 這意味著 py-spy 非常安全,可用於生產基於 Python 的代碼。
該工具使您能夠記錄配置文件、生成火焰圖以創建交互式 SVG 文件。 您還可以查看其他選項,例如更改採樣率、用於分析的本機 C 擴展、子進程、線程 ID 等。 您可以使用“top”命令實時查看程序中發生的函數,並使用“dump”命令為每個 python 線程顯示當前調用堆棧。
它支持每個 CPython 解釋器版本,例如 2.3 – 2.7 & 3.3 – 3.8。 您可以從 PyPI 或 GitHub 安裝 py-spy。
熱解儀
Pyroscope 的開源連續分析軟件可幫助您在幾分鐘內調試應用程序中的所有性能問題。
無論您使用什麼,Docker、Linux,或者正在尋找 Ruby 或 Go 文檔,您都可以啟動服務器,然後是代理,Pyroscope 涵蓋了您。 即使您的目標是 10 秒或 10 個月的軟件分析數據,他們定制設計的存儲引擎也可以進行快速查詢。

您無需擔心開銷或應用程序性能,因為它們使用不影響性能的採樣分析技術。 Pyroscope 有效地存儲您的分析數據; 因此,即使您想從各種應用程序中存儲不同的分析數據多年,這對您來說也是划算的。
它適用於 macOS、Linux 和 Docker,並支持用 Python、Go 和 Ruby 編寫的程序。
泡泡教授
Clinic.js 的 Bubbleprof 提供了一種全新且獨特的方式來分析用 Node.js 編寫的軟件。 它使用“氣泡”UI,幫助從專家到初學者的每個人確定在您的應用程序中花費的異步時間。
它通過觀察 Node.js 的異步操作、對它們進行分組、計算延遲和映射它們來可視化您的 Node.js 進程的運行方式。

Bubbleprof 通過查看特定操作組(可以是您的代碼、節點核心或模塊)中的氣泡大小來確定操作時間。 它還可以將相鄰的組用棍棒打散以減少混亂。
為了計算操作從一組流向另一組時的延遲,Bubbleprof 測量連接氣泡的箭頭長度。 除此之外,它還在測量過程中使用不同的顏色。 同時,內部彩色線條代表異步操作類型的混合作為延遲的原因。
Pyinstrument
使用 Pyinstrument 優化您的 Python 代碼。
它向您展示了為什麼您的 Python 代碼很慢,並幫助您診斷問題,從而獲得極快的性能。
要使用 Pyinstrument,您不必編寫 Python 腳本; 只需直接使用命令行調用 Pyinstrument 即可。 您的腳本將正常運行,並且該工具將生成應用程序花費時間的區域的彩色摘要。 它還帶有一個 Python API,使這個過程更加容易。

您還可以選擇在 Flask 和 Django 中分析 Web 請求,他們為此維護了詳細的文檔。 在這裡,請注意 Pyinstrument 提供統計分析,每 1 毫秒記錄一次調用堆棧,而不是跟踪您的程序進行的每個函數調用。
這是有利的,因為與跟踪分析器相比,統計分析器的開銷較低。 當它記錄整個堆棧時,跟踪昂貴的函數調用變得毫不費力。 除此之外,Pyinstrument 還隱藏(默認情況下)庫框架,讓您可以專注於影響性能的應用程序或模塊。
調試性能問題變得更加容易,因為 Pyinstrument 記錄了使用“掛鐘”時間所花費的時間。 該工具會跟踪程序讀取文件、下載數據、與數據庫通信等的所有時間。
調試
為了改善您的代碼的性能問題並使您的開發體驗更有趣,Xdebug 具有廣泛的分析和調試功能。
它實際上是一個 PHP 擴展,可讓您找到 PHP 應用程序中的瓶頸並使用外部可視化工具分析其性能以生成性能圖。
Xdebug 創建一個詳細的輸出,顯示應用程序到達錯誤的路徑,包括它傳遞給給定函數的參數。 這樣做是為了跟踪錯誤。 為了幫助開發人員清楚地理解事物,它會生成顏色編碼的信息以及結構化視圖。
它還帶有一個遠程調試器,您可以使用它來將 Xdebug 與正在運行的代碼、IDE 或瀏覽器連接起來,以查看代碼斷點並逐行執行代碼。 它提供的另一個功能是代碼覆蓋率,它顯示您的程序代碼執行了多少,它還可以幫助您進行單元測試。
斯必克
Simple Profiling eXtension (SPX) 是專為 PHP 設計的分析擴展。 它具有一些獨特的屬性,使其與其他分析擴展區分開來。 它完全免費使用並且僅限於您的基礎設施,這意味著沒有數據洩漏的風險。
SPX 的簡單性使其非常易於使用:您只需要設置命令行或環境變量來分析腳本。 或者,您也可以打開網頁上的單選按鈕來分析腳本。 因此,您不必手動檢測您的代碼。

它還支持正在運行的命令行腳本 – Ctrl-C。 除此之外,此過程還消除了使用命令行啟動器或專用瀏覽器擴展程序的需要。 SPX 支持 22 個左右的多個指標,包括各種時間和內存指標、對象、使用中的文件、I/O 等。
它可以在不離開上下文的情況下收集數據。 它的 Web UI 允許為當前使用的瀏覽器會話配置/啟用分析,並列出所有分析的腳本詳細信息和報告。 Web UI 允許您選擇特定報告進行更深入的分析,並具有一些交互式可視化功能,例如 Flamegraph、平面配置文件和時間軸,可以擴展到數百萬的函數調用。
字首
Prefix by Stackify 是一種易於安裝且輕量級的代碼分析器,深受許多開發人員的喜愛。 它可以幫助您消除應用程序性能中的瓶頸,以優化它並改善用戶體驗。
Prefix 卓越的跟踪和分析功能讓您可以快速找到隱藏的異常、慢速 SQL 查詢等。 它為您的開發人員提供了 APM(應用程序性能監控)的真正力量。 為此,Prefix 以編寫代碼的方式驗證代碼性能,並允許您推送性能更好的代碼進行測試。


通過這種方式,它從生產端收到的支持票更少,並幫助開發經理更快地實現目標。 發現所有性能不佳的查詢、未知瓶頸和 ORM 生成的查詢。
您還可以跟踪每個 SQL 調用參數、下載計時並查看受影響的記錄。 前綴還可以更輕鬆地發現 N+1 模式。 忘記整理所有那些凌亂的日誌吧; 將它們放在一起以輕鬆定位問題。
Prefix 可讓您直接在查詢請求中找到可疑日誌的上下文,並從一個日誌跳轉到一個跟踪以輕鬆調試。 前綴揭示了性能不佳的依賴項,這對於查找隱藏的異常和處理遺留代碼或框架部分非常有用。 這些依賴項可以是 Web 服務、第 3 方服務、緩存服務等。
Prefix 適用於 Windows 和 Mac,並支持 .Net、Ruby、Java、PHP、Python 和 Node.js。
斜角肌
Scalene 是用於基於 Python 的程序的高精度、高性能 GPU、CPU 和內存分析器。 與其他分析器相比,它具有多項優勢,例如運行速度更快的數量級和提供更深入的信息。
Scalene 非常快,並且使用採樣而不是儀器。 它甚至不依賴 Python 的跟踪工具。 除此之外,其開銷通常低於 10-20%。 該工具在行級別執行軟件分析,並指向那些負責程序執行時間的代碼行。

這些細節比功能級分析中的細節更有價值。 Scalene 將純粹在 Python 中花費的時間與包含庫的本機代碼花費的時間分開。 由於大多數 Python 程序員不會優化本機代碼性能,因此開發人員可以將精力集中在優化您可以實際改進的代碼上。
它以紅色突出顯示熱點,使您可以更輕鬆地發現 CPU 時間/內存分配,並輕鬆分離系統時間以查找 I/O 問題。 Scalene 可以報告 GPU 時間、分析內存使用情況並跟踪 CPU 使用情況。 Scalene 還可以識別可能的內存洩漏、配置文件複製量,並為佔用超過 1% CPU 的代碼行生成減少的配置文件。
可視化虛擬機
Java 的多合一故障排除工具 VisualVM 旨在用於生產和開發階段。 它是一個集成了輕量級分析功能和命令行 JDK 工具的可視化軟件。
VisualVM 監視在 Java 1.4+ 上運行的應用程序,並使用多種技術(例如 JMX、jvmstat、Attach API 和 Serviceability Agent)對它們進行故障排除。 該工具非常適合質量工程師、系統管理員和最終用戶的不同要求。
它自動檢測遠程和本地運行的基於 Java 的應用程序並列出它們。 該工具還允許您使用 JMX 連接手動定義程序。 對於每個進程,它顯示典型的運行時數據,例如 PID、傳遞的參數、JDK 主目錄、主類、JVM 標誌、JVM 版本以及系統和參數屬性。

VisualVM 監視應用程序中的 CPU 使用率、堆和元空間或永久代內存、正在運行的線程和加載的類。 它在時間線中顯示所有正在運行的線程,以及匯總的睡眠、運行、停放、監控和等待時間。
可以使用 VisualVM 執行檢測和採樣分析器,以進行內存管理和應用程序性能。 它顯示線程轉儲以提供對進程的快速洞察。 它還根據需要查看和創建 .hprof 快照,以幫助您發現堆使用效率低下和調試內存洩漏。
此外,VisualVM 可以讀取崩潰的基於 Java 的進程及其環境的基本數據。 您可以離線分析您的應用程序; 它可以使用堆轉儲、線程轉儲和分析快照保存應用程序運行時環境和配置,您可以在稍後階段離線處理這些快照。
它適用於 Windows、Linux 和 Unix。
軌道剖面儀
使用 Orbit Profiler 可視化您的 C/C++ 應用程序并快速查找性能問題。 這是一個調試工具和獨立分析器,旨在幫助開發人員查看和理解複雜應用程序的執行流程。
它提供了應用程序內部發生的一切的清晰視圖,因此您可以快速消除性能瓶頸並恢復應用程序的高性能。

Orbit Profiler 可以有效地在任何 C 或 C++ 應用程序上運行,前提是它可以訪問 PDB 文件。 接下來,一旦您完成下載其程序,它將開始分析。 該工具跳轉到目標進程,將自身掛鉤到選定的函數,並執行分析。
它甚至可以用於您優化的最終版本或交付版本。 除了動態儀器外,Orbit Profiler 還提供“永遠在線”的採樣功能,該功能快速、始終可用且穩健。
它適用於 Windows 和 Linux。
優步 JVM 分析器
Uber JVM Profiler 具有高級分析功能,是基於 Java 的應用程序的另一個不錯的選擇。
它提供了一個 Java 代理,可以以分佈式方式收集 Spark/Hadoop JVM 進程的多個堆棧跟踪和指標,例如內存/CPU/IO 指標。
該工具可以跟踪用戶代碼上的 java 參數和方法,而無需更改它們。 您還可以使用它來跟踪每個 Spark 應用程序的 HDFS 名稱節點的調用延遲並查找問題。 它甚至可以跟踪 Spark 應用程序的 HDFS 文件路徑以找出熱點文件並進行進一步優化。
Uber JVM Profiler 最初是為了分析 Spark 應用程序而創建的,這些應用程序通常包含多個機器或一個應用程序的進程。 因此,人們可以輕鬆地關聯這些機器或流程的指標。
但是,該工具作為典型的 Java 代理工作,您可以將它用於任何 JVM 進程。 其特點包括:
- 調試Spark app executor的內存使用情況,如java堆內存、原生內存、非堆內存、緩衝池、內存池
- 調試 CPU 使用率和垃圾收集時間
- 調試 java 類方法的頻率和時間或持續時間分析
- Argument Profiling(調試和跟踪java類方法調用及其參數值)
- Stacktrack 分析和為 CPU 時間生成火焰圖
- 調試 I/O 指標和 JVM 線程指標
特蕾西
Tracy 是幫助開發人員輕鬆調試 PHP 程序的有用工具。 它具有友好的設計和高級功能,例如 CLI 支持、調試 AJAX 調用等。
它可以快速查找和糾正錯誤、轉儲變量、記錄錯誤、可視化內存消耗以及確定查詢或腳本的執行時間。 使用顏色編碼和以紅色突出顯示問題並提供清晰的解釋有助於您輕鬆地可視化異常和錯誤並理解它們。
Tracy 帶有日誌記錄功能和環境自動檢測功能。 它將數據存儲到日誌文件中,並在停機期間向訪問者顯示服務器錯誤消息。 Tracy 還可以與 Drupal 7、OpenCart、WordPress 等集成。
vprof
vprof 是 Python 應用程序的可視化分析器。 它為 Python 程序的不同特徵(例如內存使用和運行時間)提供了豐富的交互式可視化。

它在 BSD 許可下可用,並支持 Python 3.4 及更高版本。
結論
應用程序性能是滿足最終用戶期望的關鍵因素。 如果出現性能問題,您必須準備好在影響最終用戶體驗之前診斷問題。
因此,請繼續優化您的應用程序並立即修復問題,以繼續使用我在本文中提到的工具為用戶提供超快的應用程序性能。
這是一個快速比較表,顯示了上述分析器及其主要用途。
| 名稱 | 語言 |
| 間諜 | Python |
| 熱解儀 | 蟒蛇,紅寶石,去 |
| 泡泡教授 | 節點.js |
| Pyinstrument | Python |
| 調試 | PHP |
| 斯必克 | PHP |
| 字首 | Python、.NET、Java、Node.js、Ruby、PHP |
| 斜角肌 | Python |
| 可視化虛擬機 | 爪哇 |
| 軌道剖面儀 | C、C++ |
| 優步 JVM 分析器 | 爪哇 |
| 特蕾西 | PHP |
| vprof | Python |
