13 用于调试应用程序性能问题的分析软件

您的应用程序的目的是为您的最终用户提供良好的服务。

它必须快速、响应迅速、易于使用且可靠,以及其他理想的功能。

但是以持续提供顶级性能的方式维护您的软件并不是那么容易。

当您的代码开始调用不必要的函数、自我绊倒、捕获错误并进入额外循环时,可能会导致效率低下。 您的应用程序可能变得迟缓、无响应或行为不稳定。

如果不解决这些问题,应用程序的整体性能就会受到影响。

因此,您的客户可能会因为性能不佳和速度慢而感到恼火或完全停止使用您的应用程序。 它不仅会降低您的声誉,还会在收入和利润方面造成损失。 因此,需要对您的代码进行分析、审查和调试,以实现最佳性能。 最快的方法是使用软件分析工具来监控和调试您的代码并消除与性能相关的瓶颈。

在本文中,您将了解软件分析及其如何帮助您。 然后,我将向您介绍一些最好的分析工具来调试您的应用程序并优化其性能。

什么是软件分析?

软件分析是一种动态代码分析,其中使用程序运行时收集的数据来调查程序的行为。 它旨在确定您必须优化的各种程序部分,以提高应用程序速度、响应能力并减少其内存和资源消耗。

软件分析器通常测量函数调用的持续时间和频率,以及与程序相关的内存或时间复杂度。 还有一些特定的分析器可用,比如内存分析器。

概要分析通常通过检测程序的源代码来执行。 剖析器可以使用不同的剖析技术,例如检测、基于事件、统计或模拟方法。

为什么软件分析很重要?

需要软件分析来确定与特定功能相关的资源使用和执行时间。 它有助于优化程序的速度,同时确保它消耗最少的资源。

此外,它还用于跟踪和优化 CPU 使用率和命令执行时间。

因此,有必要选择正确的软件分析工具,以确保您可以更快地调试与性能相关的问题,从而提高其效率并提供更好的最终用户体验。 许多分析器还附带详细的报告和交互式图表以及可视化效果,可帮助您找到问题的确切根本原因,从而更轻松地解决问题。

因此,这里列出了一些您可以尝试的最佳软件分析器,并告诉我们最适合您的是什么。

间谍

间谍 是一个优秀的 Python 采样分析器。 这使您可以先睹为快,了解基于 Python 的应用程序花费时间的所有事情。

为此,您不必修改代码或完全重新启动程序。 py-spy 涉及低开销,并且在 Rust 中开发以执行更快的速度。 它不是为了在运行基于 python 的分析程序的同一进程中运行而构建的。 这意味着 py-spy 非常安全,可用于针对基于 Python 的生产代码。

该工具使您能够记录配置文件、生成火焰图以创建交互式 SVG 文件。 您还可以查看其他选项,例如更改采样率、用于分析的本机 C 扩展、子进程、线程 ID 等。 您可以使用“top”命令实时查看程序中发生的函数,并使用每个 python 线程的“dump”命令显示当前调用堆栈。

它支持每个 CPython 解释器版本,例如 2.3 – 2.7 和 3.3 – 3.8。 您可以从 PyPI 或 GitHub 安装 py-spy。

高温望远镜

的开源连续分析软件 高温望远镜 帮助您在几分钟内调试应用程序中的所有性能问题。

无论您使用什么,Docker,Linux,或者正在寻找 Ruby 或 Go 文档,您都可以启动服务器,然后启动代理,Pyroscope 可以满足您的需求。 即使您的目标是十秒或十个月的软件分析数据,他们定制设计的存储引擎也可以进行快速查询。

您无需担心开销或应用程序性能,因为它们使用不影响性能的采样分析技术。 Pyroscope 有效地存储您的分析数据; 因此,即使您想要多年存储来自各种应用程序的不同分析数据,它对您来说也是划算的。

它适用于 macOS、Linux 和 Docker,并支持用 Python、Go 和 Ruby 编写的程序。

泡泡教授

泡泡教授 Clinic.js 提供了一种新颖独特的方法来分析用 Node.js 编写的软件。 它使用“气泡”UI 帮助从专家到初学者的每个人确定在您的应用程序中花费的异步时间。

  修复芒果不起作用的 8 种方法

它通过观察其异步操作、对它们进行分组、计算延迟并映射它们来可视化您的 Node.js 进程如何运行。

Bubbleprof 通过查看一组特定操作中的气泡大小来确定操作时间,这些操作可以是您的代码、节点核心或模块。 它还会合并相邻的组以减少混乱。

为了计算操作从一组流向另一组时的延迟,Bubbleprof 测量连接气泡的箭头长度。 除此之外,它还在测量过程中使用不同的颜色。 同时,内部彩色线代表异步操作类型的混合作为延迟的原因。

仪器

优化你的 Python 代码 仪器.

它向您展示了您的 Python 代码运行缓慢的原因,并帮助您诊断问题,以便您获得超快的性能。

要使用 Pyinstrument,您不必编写 Python 脚本; 只需直接使用命令行调用 Pyinstrument。 您的脚本会正常运行,并且该工具会生成应用程序花费时间的彩色摘要。 它还带有一个 Python API,使该过程更加容易。

您也可以选择在 Flask 和 Django 中分析 Web 请求,他们为此维护了详尽的文档。 在这里,请注意 Pyinstrument 提供统计分析,每 1 毫秒记录一次调用堆栈,而不是跟踪程序进行的每个函数调用。

这是有利的,因为与跟踪分析器相比,统计分析器涉及更低的开销。 由于它记录了整个堆栈,跟踪昂贵的函数调用变得毫不费力。 除此之外,Pyinstrument 还隐藏(默认情况下)库框架,使您可以专注于影响性能的应用程序或模块。

调试性能问题变得更加容易,因为 Pyinstrument 记录了使用“挂钟”时间花费的时间。 该工具跟踪所有程序读取文件、下载数据、与数据库通信等的时间。

X调试

为了改善您代码的性能问题,让您的开发体验更有趣一点, X调试 具有广泛的分析和调试功能。

它实际上是一个 PHP 扩展,允许您找到 PHP 应用程序中的瓶颈并使用外部可视化工具分析其性能以生成性能图。

Xdebug 创建一个详细的输出,显示应用程序到达错误的路径,包括它传递给给定函数的参数。 这样做是为了跟踪错误。 为了帮助开发人员清楚地理解事物,它会生成颜色编码的信息以及结构化视图。

它还带有一个远程调试器,您可以使用它来将 Xdebug 与正在运行的代码、IDE 或浏览器连接起来,以查看代码断点并逐行执行代码。 它提供的另一个功能是代码覆盖率,显示您的程序代码执行了多少,它还可以帮助您进行单元测试。

SPX

简单分析扩展(SPX) 是为 PHP 设计的分析扩展。 它有一些独特的属性,使它有别于其他分析扩展。 它完全免费使用并且仅限于您的基础设施,这意味着没有数据泄露的风险。

SPX 的简单性使其非常易于使用:您所需要的只是设置命令行或环境变量来分析脚本。 或者,您也可以打开网页上的单选按钮来分析脚本。 因此,您不必手动检测代码。

它还支持运行命令行脚本——Ctrl-C。 除此之外,这个过程还消除了使用命令行启动器或专用浏览器扩展的需要。 SPX 支持大约 22 种指标,包括各种时间和内存指标、对象、正在使用的文件、I/O 等。

它可以在不离开上下文的情况下收集数据。 它的 Web UI 允许为当前使用的浏览器会话配置/启用分析,并列出所有分析脚本的详细信息和报告。 Web UI 允许您选择特定报告以进行更深入的分析,并具有一些交互式可视化效果,例如火焰图、平面配置文件和时间线,可以扩展到数百万次函数调用。

字首

字首 Stackify 是一款易于安装且轻量级的代码分析器,深受许多开发人员的喜爱。 它可以帮助您消除应用程序性能中的瓶颈,以优化应用程序并改善用户体验。

Prefix 卓越的跟踪和分析功能使您能够快速找到隐藏的异常、缓慢的 SQL 查询等。 它为您的开发人员提供了 APM(应用程序性能监控)的真正力量。 为此,Prefix 按照编写的方式验证代码性能,并允许您推送性能更好的代码进行测试。

这样,它从生产端收到的支持工单更少,并帮助开发经理更快地实现目标。 发现所有性能不佳的查询、未知瓶颈和 ORM 生成的查询。

您还可以跟踪每个 SQL 调用参数、下载计时并查看受影响的记录。 前缀也使得识别 N+1 模式变得更简单。 忘记整理所有那些杂乱的日志; 将它们放在一起可以轻松定位问题。

Prefix 让您可以直接在查询请求中找到可疑日志的上下文,并从一个日志跳转到跟踪以轻松进行调试。 前缀揭示了性能不佳的依赖项,这对于查找隐藏的异常和处理遗留代码或框架部分很有用。 这些依赖项可以是 Web 服务、第三方服务、缓存服务等。

Prefix 适用于 Windows 和 Mac,支持 .Net、Ruby、Java、PHP、Python 和 Node.js。

  Wi-Fi 6E:它是什么,它与 Wi-Fi 6 有何不同?

斜角面

斜角面 是用于基于 Python 的程序的高精度、高性能 GPU、CPU 和内存分析器。 与其他剖析器相比,它具有多项优势,例如运行速度更快和提供更深入的信息。

Scalene 非常快,并且使用采样而不是仪器。 它甚至不依赖于 Python 的跟踪工具。 除此之外,它的开销通常低于 10-20%。 该工具在行级别执行软件分析,并指向负责程序执行时间的那些代码行。

这些细节比功能级分析的细节更有价值。 Scalene 将纯粹花在 Python 上的时间与花在包含库的本机代码上的时间区分开来。 由于大多数 Python 程序员不会优化本机代码性能,因此开发人员可以将精力集中在优化您可以实际改进的代码上。

它以红色突出显示热点,使您更容易发现 CPU 时间/内存分配,并轻松分离系统时间以查找 I/O 问题。 Scalene 可以报告 GPU 时间、分析内存使用情况并跟踪 CPU 使用情况。 Scalene 还可以识别可能的内存泄漏、配置文件复制量,并为消耗超过 1% 的 CPU 的代码行生成减少的配置文件。

虚拟机

适用于 Java 的多合一故障排除工具, 虚拟机, 旨在用于生产和开发阶段。 它是一个集成了轻量级分析功能和命令行 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。

轨道剖面仪

使用可视化您的 C/C++ 应用程序并快速发现性能问题 轨道剖面仪. 这是一个调试工具和独立的分析器,旨在帮助开发人员查看和理解复杂应用程序的执行流程。

它提供了应用程序内部发生的一切的清晰视图,因此您可以快速消除性能瓶颈并恢复应用程序的高性能。

Orbit Profiler 可以在任何 C 或 C++ 应用程序上高效工作,前提是它可以访问 PDB 文件。 接下来,它会在您完成程序下载后开始分析。 该工具跳转到目标进程,将自身挂钩到选定的函数,并执行分析。

它甚至可以用于优化的最终版本或运输版本。 除了动态仪器外,Orbit Profiler 还提供“始终在线”的采样功能,该功能速度快、始终可用且功能强大。

它适用于 Windows 和 Linux。

优步 JVM 分析器

配备高级分析功能, 优步 JVM 分析器 是基于 Java 的应用程序的另一个不错的选择。

  26 款最佳 3D 建模软件

它提供了一个 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 类方法调用及其参数值)
  • CPU 时间的 Stacktrack 分析和生成火焰图
  • 调试 I/O 指标和 JVM 线程指标

翠西

翠西 是帮助开发人员轻松调试 PHP 程序的有用工具。 它具有友好的设计和高级功能,例如 CLI 支持、调试 AJAX 调用等。

它可以快速查找和纠正错误、转储变量、记录错误、可视化内存消耗以及确定查询或脚本的执行时间。 使用颜色编码并以红色突出显示问题并附上清晰的解释,有助于您轻松可视化异常和错误并理解它们。

Tracy 带有日志记录功能和环境自动检测。 它将数据存储到日志文件中,并在停机期间向访问者显示服务器错误消息。 Tracy 还可以与 Drupal 7、OpenCart、WordPress 等集成。

vprof

vprof 是 Python 应用程序的可视化分析器。 它为 Python 程序的不同特征(例如内存使用情况和运行时间)提供丰富的交互式可视化效果。

它在 BSD 许可下可用,并支持 Python 3.4 及更高版本。

结论

应用程序性能是满足最终用户期望的关键因素。 如果出现性能问题,您必须在影响最终用户体验之前准备好诊断问题。

因此,请继续优化您的应用程序并立即解决问题,以便使用我在本文中提到的工具继续为用户提供超快的应用程序性能。

这是一个快速比较表,显示了上述分析器及其主要用途。

姓名
语言
间谍
Python
高温望远镜
Python、红宝石、围棋
泡泡教授
节点.js
仪器
Python
X调试
PHP
SPX
PHP
字首
Python、.NET、Java、Node.js、Ruby、PHP
斜角面
Python
虚拟机
爪哇
轨道剖面仪
C、C++
优步 JVM 分析器
爪哇
翠西
PHP
vprof
Python