持续剖析

什么是持续剖析? 学习这项技术,以识别和解决潜在的性能瓶颈和其他问题。

持续剖析简介

开发者经常在其生产应用中遇到问题和效率低下。 通常,他们必须花费大量时间检查日志和指标来解决这些问题,但这些信息可能不是很详尽。

然而,有一种更现代的方法,它不仅可以深入了解可操作的性能问题,还可以识别代码库中问题的发生位置和原因。 这种方法称为持续剖析。

在本文中,我们将了解持续剖析、其工作原理、剖析器类型、持续剖析的优势等等。

什么是持续剖析?

持续剖析是一种实时监控技术,用于分析生产应用,以识别和解决影响应用用户体验的性能问题。 它涉及收集与执行相关的因素(如 CPU 使用率、磁盘 I/O 消耗和函数调用持续时间)的数据,以指出障碍和需要改进的领域。

通过持续剖析,开发者可以获得有关已执行函数的更多信息。 另一方面,工程师能够收集 CPU 利用率并记录测量使用情况以改进性能。

什么是持续剖析器?

专业人员使用一种名为剖析器的代码开发支持工具来实现持续剖析。

通过在程序执行期间将其嵌入到程序的环境中,开发者可以识别需要改进的代码并对其进行优化。

通过这样做,他们可以确保其应用满足性能标准并高效扩展。 此外,此过程有助于开发者更好地了解其代码的性能,并就未来的优化做出明智的决策。

最终,识别瓶颈和优化代码的能力可以带来改进的用户体验和更高的工作效率。

剖析器类型

抽样剖析器

抽样剖析器,也称为统计剖析器,收集不同的时间点样本,并分析特定时间正在执行的函数。

结果通常是应用程序运行时执行特定源代码的次数。 专业人员使用此结果来分析应用程序的性能并识别潜在的瓶颈。

Instrumentation 剖析器

这种类型的剖析器比抽样剖析器生成更多的反馈数据。

这是如何工作的? 因此,开发者在应用程序内的关键检查点插入额外的代码以收集性能数据。

这种方法允许他们测量函数、调用持续时间、记录例程序列和捕获日志。 但是,缺点是源代码可能会被损坏,因为需要对其进行修改才能获得所需的结果。

持续剖析的工作原理是定期抽样程序的执行,并收集有关每个采样点程序状况的信息。

此过程通常涉及以下步骤

  1. Instrumentation — 第一步是将这些剖析工具集成到应用程序的运行时环境中以收集性能数据。 各种技术(例如 代码 Instrumentation、运行时挂钩和抽样)可用于此目的。

  2. 数据收集 — 在对应用程序进行 Instrumentation 后,剖析工具会收集有关其执行的各个方面的数据,例如 CPU 使用率、内存使用率、网络活动和磁盘 I/O。

  3. 数据分析 — 收集数据后,开发者会检查数据以检测可能表明性能问题的模式和趋势。 为了进行此分析,他们使用了不同的技术,包括统计分析、数据可视化和机器学习算法。

  4. 性能优化 — 根据数据分析的结果,开发者可以更改应用程序的代码或配置以优化性能。 这可能涉及优化算法、减少内存使用或改善 I/O 性能。

  5. 持续监控 — 在进行性能优化后,剖析工具会继续监控应用程序,以确保更改已产生预期的效果,并识别可能出现的任何新的性能问题。

持续剖析中的数据可视化

剖析工具可视化收集的数据的最常见方式是火焰图。

火焰图是通过在应用程序中抽样收集的堆栈跟踪的可视化表示,以直观且易于理解的方式显示剖析数据。

定时且颜色编码的水平条说明了在函数或方法调用中花费的时间量,从而可以轻松识别瓶颈,尤其是在复杂和动态的应用程序中。

以下是火焰图的示例。

(图片)

在此图中,Y 轴表示堆栈深度,每个矩形的宽度与代码路径中的总时间成正比。 基本上,最宽的塔是发生最高延迟的点。

选择持续剖析工具

开发者使用各种工具来确保应用程序以最佳方式运行。 一些流行的工具包括

Datadog 持续剖析器

Datadog 的持续剖析器 从生产服务器收集剖析,确保您始终拥有解决性能问题所需的数据。

它与环境无关,并且适用于任何堆栈,包括 Java、Python、Node、.NET 和 Ruby。 它们具有低开销剖析器,可为代码行以及 CPU 绑定提供服务。

Datadog 剖析器与平台上的其他服务紧密集成。 这使您可以根据您的团队尝试解决的性能问题,将剖析器与您选择的其他程序一起使用。

它们还具有自定义仪表板,可跟踪剖析趋势,并且可在所有语言和代码库中使用。

Amazon CodeGuru 剖析器

Amazon CodeGuru 剖析器 使用机器学习从您的生产应用程序收集运行时性能数据。 此服务提供有关执行时间最长或消耗最多 CPU 容量的函数的可操作见解。

凭借多年的性能监控经验,Amazon CodeGuru 剖析器可以自动分析您的剖析,并建议改进代码性能的方法。

CodeGuru 支持 Python 和 Java 应用程序。 您还可以使用此剖析器来排除应用程序中的延迟和 CPU 问题。

要开始使用,您需要 设置 CodeGuru 剖析器,之后您可以浏览提供的不同数据可视化。

Google Cloud Profiler

Google Cloud Profiler 检查您服务器上的代码性能,并使用此信息来建议如何使您的应用程序更快、更高效。

Amazon 开发者为在 Google Cloud 和其他云平台上运行的应用程序设计了此软件。 它还具有低开销,非常适合生产环境。

此剖析器支持常用语言; 收集多种剖析类型; 并适用于 Node.js、Go、Python 和 Java 应用程序。

Dynatrace 持续剖析器

Dynatrace 是一种全栈监控和性能优化工具,可为基于云的应用程序提供实时监控和分析。

其持续 CPU 剖析允许您执行代码级 CPU 分析。 借助此功能,您可以分解数据; 识别 CPU 消耗级别最高的 CPU; 并通过代码执行、网络和磁盘 I/O 消耗来过滤它们。

Dynatrace 还具有内存转储分析和进程崩溃选项,可让您检测 Linux 和 Windows 环境中的应用程序崩溃。 它有助于分析这些崩溃的主要原因,并支持各种编程语言,包括 .NET、PHP、Node.js、Java 和 Golang 应用程序。

持续剖析的优势

持续剖析为软件开发和应用程序性能优化提供了多项优势。 以下是一些主要优势

  • 早期检测性能问题 — 持续剖析使开发者能够在开发周期的早期检测到性能问题。 通过及早发现这些性能问题,开发者可以在这些问题变得更加复杂且修复成本更高之前解决它们。

  • 减少停机时间 — 通过在潜在问题变得严重之前发现它们,持续剖析有助于 最大限度地减少应用程序停机时间。 因此,开发者可以通过采取积极措施来解决性能问题,从而提高应用程序的可用性和可靠性。

  • 更好地利用资源 — 通过持续剖析,开发者可以快速识别资源使用方面的问题。 例如,他们可以检测到 CPU 或内存使用率过高,从而使应用程序能够更有效地扩展。

  • 提高应用程序性能 — 持续剖析通常通过识别代码中缓慢或效率低下的区域来优化应用程序性能。 因此,通过优化这些区域,应用程序可以运行得更快、更高效。

持续剖析与传统剖析

由于持续剖析比传统剖析具有许多优势,因此近年来持续剖析越来越受欢迎。 持续剖析的主要优势之一是它能够快速识别和解决性能问题。 与在特定时间间隔收集数据的传统剖析不同,持续剖析实时持续监控应用程序的性能。 这为开发者提供了应用程序行为的准确而详细的图片。

但是,另一方面,传统剖析可能会遗漏采样间隔之间发生的关键性能问题,从而导致识别和解决问题的延迟。

通过将持续剖析集成到生产环境中并构建管道,开发者可以自动化性能监控和分析过程。 这将提高效率、提供高质量的用户体验并加快反馈速度。

结论

剖析不应被视为一次性事件,而只需在生产应用程序出现问题时才需要完成。 通过采取主动方法而不是被动方法来解决性能问题,开发团队始终可以预测这些问题并做好克服这些问题的准备。

这就是为什么持续剖析已成为开发者提高应用程序性能和效率的强大工具。 采用这种方法可以帮助开发者保持领先地位,并大规模交付高质量的软件。

掌控您的运营,并将存储成本降低 90%

免费开始使用 运行概念验证

无需信用卡。

quote-shape

相关资源


DBU logo

免费 InfluxDB 培训

通过免费的自主进度和讲师指导的培训,快速开始您的 InfluxDB 之旅。

dbu-illustration