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

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

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

但是以一种能保持高水平性能的方式维护软件并不容易。

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

而如果您不解决这些问题,整体应用程序性能将受到影响。

因此,由于性能不佳和slow speed而使得您的客户可能感到烦躁或停止使用您的应用程序。这不仅会降低您的声誉,还会在收入和利润方面给您带来成本。因此,您的代码需要进行分析、审查和调试,以实现最佳性能。最快的方法是使用软件分析工具来监视和调试代码,并消除与性能相关的瓶颈。

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

什么是软件分析?

软件分析是一种动态代码分析,通过使用程序运行时收集的数据来研究程序的行为。它旨在确定必须优化的各个程序部分,以增加应用程序的速度、响应性,并减少其内存和资源消耗。

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

分析通常通过对程序源代码进行仪表化来完成。分析器可以使用不同的分析技术,如仪表化、基于事件、统计或模拟方法。

为什么软件分析很重要?

需要进行软件分析以确定特定函数的资源使用情况和执行时间。它有助于提高程序的速度,并确保它消耗最少的资源。

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

因此,选择正确的软件分析工具对于确保您可以更快地优化应用程序以提高效率并提供更好的用户体验至关重要。许多分析器还提供详细的报告和交互式图表和可视化,帮助您找到问题的确切根本原因,从而更容易解决问题。

因此,以下是一些最佳的软件分析工具列表,您可以尝试并告诉我们哪个对您最有效。

py-spy

py-spy 是Python的一个出色的采样分析工具。它可以让您一窥Python应用程序上花费时间的所有事情。

为此,您不需要修改代码或完全重新启动程序。py-spy的开销很低,而且它是用Rust开发的,以实现更高的速度。它不是在与您的被分析的基于Python的程序运行的同一个进程中运行。这意味着py-spy对于生产环境中的Python代码是非常安全和可靠的。

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

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

Pyroscope

开源的持续性性能分析软件 Pyroscope 可以帮助您在几分钟内调试应用程序中的所有性能问题。

无论您使用的是 Docker、Linux,还是寻找 Ruby 或 Go 文档,Pyroscope 都能满足您的需求。即使您希望进行十秒钟或十个月的软件性能分析数据,他们定制的存储引擎也可以提供快速查询。

由于使用采样分析技术,您无需担心开销或应用程序性能。Pyroscope可以高效地存储您的性能分析数据,因此,即使您想要存储多个应用程序的不同性能分析数据数年,也是具有成本效益的。

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

Bubbleprof

Bubbleprof 是 Clinic.js 提供的一种全新独特的方式,用于分析您使用 Node.js 编写的软件。它使用“气泡”界面,帮助从专家到初学者确定应用程序中异步时间的花费。

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

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

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

Pyinstrument

使用 Pyinstrument 优化您的 Python 代码。

它可以显示您的 Python 代码为何较慢,并帮助您诊断问题,以实现快速的性能。

要使用 Pyinstrument,您无需编写 Python 脚本,只需直接在命令行中调用 Pyinstrument。您的脚本将正常运行,工具将生成彩色的摘要,显示应用程序所花费时间的区域。它还提供了一个Python API,使这个过程更加简单。

您还可以选择在 Flask 和 Django 中分析 Web 请求,针对这一点,他们有详细的文档。在这里,请注意 Pyinstrument 提供的是统计性能分析,它记录每 1 毫秒的调用堆栈,而不是跟踪程序的每个函数调用。

这是有优势的,因为统计性能分析比跟踪性能分析具有更低的开销。由于它记录了整个堆栈,跟踪昂贵的函数调用变得轻松。此外,Pyinstrument 还默认隐藏库帧,让您可以专注于影响性能的应用程序或模块。

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

Xdebug

为了改善您的代码性能问题,并使您的开发体验更加有趣,Xdebug 提供了广泛的性能分析和调试能力。

它实际上是一个 PHP 扩展,允许您找到 bottlenecks in your PHP 应用程序,并使用外部可视化工具生成性能图表来分析其性能。

Xdebug 会生成详细的输出,显示应用程序到达错误的路径,包括传递给给定函数的参数。这是为了跟踪错误。为了帮助开发人员清晰地理解事物,它会生成带有结构化视图和彩色信息的输出。

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

SPX

Simple Profiling eXtension(SPX)是为PHP设计的一种分析扩展。它具有一些独特的属性,使其与其他分析扩展区别开来。它完全免费使用,仅限于您的基础设施,这意味着不存在数据泄漏的风险。

SPX的简洁性使其非常易于使用:您只需设置一个命令行或环境变量来分析脚本。或者,您也可以在网页上切换到选项按钮以分析脚本。因此,您不必手动检测代码。

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

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

Prefix

Prefix是一种易于安装且轻量级的代码分析器,许多开发人员喜欢使用。它帮助您消除应用程序性能中的瓶颈,进行优化并改善用户体验。

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

通过这种方式,它从生产环境方面接收到的支持票数较少,帮助开发经理更早地实现目标。发现所有性能不佳的查询、未知的瓶颈和ORM生成的查询。

您还可以跟踪每个SQL调用参数,下载计时并查看受影响的记录。Prefix使得更容易发现N+1模式。别再费力整理那些杂乱的日志了,将它们汇集在一起以便轻松定位问题。

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

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

Scalene

Scalene是一种高精度、高性能的GPU、CPU和内存分析器,用于基于Python的程序。它比其他分析器具有几个优点,例如运行速度更快、提供更详细的信息。

Scalene非常快速,并且使用采样而不是仪器。它甚至不依赖于Python的跟踪功能。此外,它的开销通常低于10-20%。该工具以行级别执行软件分析,并指出导致程序执行时间的代码行。

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

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

VisualVM

这是一款用于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。

Orbit Profiler

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

它提供了应用程序内部发生的所有事情的清晰视图,以便您可以快速消除性能瓶颈并恢复应用程序的高性能。

Orbit Profiler可以高效地处理任何C或C++应用程序,只要能够访问PDB文件。完成下载程序后,它将开始进行分析。该工具跳转到目标进程,钩住所选函数并执行分析。

它甚至可以在优化的最终版或发布版本上工作。除了动态插装外,Orbit Profiler还提供了“始终开启”的采样功能,它快速、始终可用且稳定。

它适用于Windows和Linux。

Uber JVM Profiler

Uber JVM Profiler是另一个适用于基于Java的应用程序的高级分析工具。

它提供了一个Java Agent,可以以分布方式收集Spark/Hadoop JVM进程的多个堆栈跟踪和度量指标,例如内存/CPU/IO指标。

该工具可以在不更改用户代码的情况下跟踪Java参数和方法。您还可以使用它来跟踪每个Spark应用程序的HDFS名称节点的调用延迟并找到问题。它甚至可以跟踪Spark应用程序的HDFS文件路径以找出热门文件并进行进一步优化。

Uber JVM Profiler最初是为了对Spark应用程序进行性能分析而创建的,这些应用程序通常包括多台机器或进程。因此,人们可以轻松地将这些机器或进程的度量相关联。

然而,该工具作为一个典型的Java代理运行,并且您可以将其用于任何JVM进程。其功能包括:

  • 调试Spark应用程序执行器的内存使用情况,如Java堆内存、本地内存、非堆内存、缓冲池和内存池
  • 调试CPU使用率和垃圾回收时间
  • 调试Java类方法的频率、时间或持续时间分析
  • 参数分析(调试和跟踪Java类方法调用及其参数值)
  • 堆栈跟踪分析和生成CPU时间的火焰图
  • 调试I/O度量和JVM线程度量

Tracy

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

它可以快速找到和纠正错误,转储变量,记录错误,可视化内存消耗,并确定查询或脚本的执行时间。使用颜色编码和以清晰的解释将问题标记为红色,可以帮助您轻松可视化异常和错误并理解它们。

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

vprof

vprof是Python应用程序的可视化分析工具。它为您的Python程序的不同特性(如内存使用和运行时间)提供了丰富的交互式可视化。

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

结论

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

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

下面是一个快速比较表,显示上述分析工具及其主要用途。

名称 语言
py-spy Python
Pyroscope Python, Ruby, Go
Bubbleprof Node.js
Pyinstrument Python
Xdebug PHP
SPX PHP
Prefix Python, .NET, Java, Node.js, Ruby, PHP
Scalene Python
VisualVM Java
Orbit Profiler C, C++
Uber JVM Profiler Java
Tracy PHP
vprof Python

类似文章