Pyroscope Java 接入最佳实践

Pyroscope
Pyroscope 是 Grafana 开源的持续性能分析平台,旨在帮助用户从应用程序中获取性能洞察,以优化资源使用,如 CPU、内存和 I/O 操作。将 Pyroscope 数据上报到观测云,使用户能够全面了解应用程序的行为,并能够深入到特定服务中进行更精确的根源分析。Pyroscope 为 OpenTelemetry 补全了 Profiling 能力,同时,可以实现 Profiling 与 Tracing 的关联。
核心功能
持续性能分析:通过持续分析应用程序的性能,帮助团队快速识别性能瓶颈并优化应用程序。
低开销和高效压缩:确保在生产环境中进行性能分析时对应用程序的性能影响最小。
多语言支持:客户端 SDK 支持多种编程语言,包括 Go、Java、Python、Ruby、PHP 和 .NET。
灵活的部署方式:支持在多种环境中部署,包括 Kubernetes 等。
使用场景
主动优化:通过持续监控减少资源消耗,提高应用程序性能,预防延迟问题。
快速响应:在发生性能问题时,能够快速定位并解决,例如调试 CPU、内存或 I/O 瓶颈。
支持类型
Pyroscope 支持采集以下数据类型:
CPU 使用情况
内存使用情况
I/O 操作
调用栈(Call Stacks)
分配的内存(Heap & Allocation)
协程或线程的使用情况
函数级性能数据
接入观测云
实现说明
OpenTelemtry 链路与 pyroscope profiling 数据关联实现原理,主要是通过给 profiling 和 tracing 注入 runtime_id 标签。
主机部署
开启 opentelemetry 及 pyroscope 采集器
进入 DataKit 安装目录下,执行以下命令:
重启 DataKit
接入 JAVA 应用
pyroscope-java 是基于 async-profiler 的增强版本。
pyroscope-otel 是基于 pyroscope-java 封装的 OpenTelemetry 版本,意在与 OpenTelemetry APM 进行融合。
下载依赖
pyroscope-otel 下载地址: https://repo1.maven.org/maven2/io/pyroscope/otel/0.11.0/otel-0.11.0.jar,重命名为 pyroscope-otel.jar
opentelemetry-java 下载地址: https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases
Agent 代码仓库:https://github.com/grafana/otel-profiling-java/releases
启动参数
java 应用启动命令如下,供参考。
注意: UUID 为注入的随机 id ,用于关联 trace 与 profile 的关联 id 赋值,需要确保 UUID 能正常被应用。
按照实际业务需求选择合适的参数:
opentelemetry-java 相关参数参考 OpenTelemetry 官方文档。
pyroscope 相关参数参考 Pyroscope 官方文档,部分参数说明如下:
配置说明
效果演示
观测云在采集 profiling 数据时可以通过一些配置实现 profiling 与 tracing 数据的关联,其原理主要是通过给 profiling 和 tracing 注入 runtime_id 标签实现关联,在链路中可以点击代码热点,可以看到关联的 profiling 信息。







评论