当前位置: 首页 > news >正文

Java APM如何Profiling:使用火焰图多维度分析应用性能瓶颈

一、概述

近几年都在做Java可观测的Agent模块,最近刚给公司可观测产品整合了Profiling模块,实现了实时分析应用的cpu,内存,请求耗时,锁 四种资源,可通过火焰图形式多维度的分析应用的性能瓶颈。本篇文档主要是描述公司可观测产品的Profiling功能,也算是给公司产品做一次宣传。

二、核心技术特点

ASGCT技术:

  • 高精度采样:ASGCT技术能够在不影响应用程序正常运行的前提下,高效地采集调用上下文信息,确保数据的准确性和完整性。
  • 低开销:通过对采样频率和数据量的智能控制,最大限度减少对系统资源的占用,保证应用性能不受影响。经过测试每种事件的采集性能损耗不超过1%,多种事件同时采集性能损耗不超过5%,采样命中率超过95%(即存在该采样而未采样情况)。

多维度事件采集:

  • CPU使用情况:实时监控CPU的使用情况,帮助识别CPU密集型操作。
  • 内存使用情况:跟踪内存分配和释放,定位内存泄漏和大对象创建等问题。
  • 耗时分析:记录函数调用的耗时,找出执行时间过长的代码段。
  • 锁争用分析:检测线程间的锁争用,优化并发性能。

精准关联:

  • TraceID 和 SpanID:每个样本都与唯一的traceid和spanid相关联,确保在分布式环境中也能精确追踪每一个请求的完整调用链路。
  • 宿主机IP:记录样本采集时的宿主机IP地址,便于跨主机、跨集群的性能分析。
  • 业务入口:每个样本都能关联业务入口,指明当前请求属于与那个http,rpc,mq等请求。
  • 中间件:每个样本都能标识当前代码属于哪个中间件,比如是操作db,redis还是执行业务代码。

火焰图生成:

  • 可视化展示:将一段时间内的样本数据汇总生成火焰图,直观展示各个函数的调用关系及其消耗的时间或资源。
  • 动态调整:支持用户自定义时间段,灵活选择需要分析的事件类型,提供更精细的性能洞察。

采集事件与采集频率

  • 采集事件: cpu,内存,耗时,锁 4种事件可分别配置采集
  • 采集频率: cpu和耗时可动态调整采集频率,内存和锁后续测试完善后也看动态调整

.

三、功能截图

.

采集配置管理

采集配置管理
采集配置管理,四种事件可分别配置,cpu和耗时(off cpu)频率可分别配置,越小说明采集频率越高,额外消耗资源阅读,建议用默认值。

火焰图维度

在这里插入图片描述
上述红框中是火焰图的分析维度选项,选择维度有服务实例,业务入口,中间件操作,traceId,cpu消耗,耗时,内存消耗,锁耗时,样本时间这些维度。
.
在这里插入图片描述
默认情况下展示整个应用的某一项资源在一个时间区间内的分析火焰图。
.
在这里插入图片描述
在这里插入图片描述
可以从多个维度筛选采样样本后生成火焰图。
.

实操案列

查看176机器上profiling-demo-b服务最近15分钟的业务请求Post /postMethodB1的内存消耗情况:
在这里插入图片描述
从上述内存火焰图能轻易看出存在内存问题的代码,很方便排查解决。

.

四、结尾

欢迎大家试用我公司的产品,如果觉得看了这篇博客有所收获点个赞啊!

http://www.dtcms.com/a/32231.html

相关文章:

  • Java Idea配置问题
  • 【多语言生态篇三】【DeepSeek×Go:高并发推理服务设计】
  • 2502C++,C++继承的多态性
  • 【误差理论与可靠性】第二章 可靠性的基本概念和参数体系
  • 25林业研究生复试面试问题汇总 林业专业知识问题很全! 林业复试全流程攻略 林业考研复试真题汇总
  • 【JavaWeb12】数据交换与异步请求:JSON与Ajax的绝妙搭配是否塑造了Web的交互革命?
  • 京东外卖骑手全部缴纳五险一金
  • 1.vue使用vite构建初始化项目
  • C/C++ 中 volatile 关键字详解
  • 用C++实现一个简单的算法:快速排序(QuickSort)
  • 本周行情——250222
  • 使用 DeepSeek 和 ECharts 实现大屏数据可视化
  • Flutter 启动优化
  • 如何对比软件需求做的是否合格?
  • 在 JavaScript 中接入 Facebook 事件
  • Apache Hop:开源版本的Kettle
  • 标准I/O与文件I/O
  • LeetCode51
  • SpringSecurity设置白名单
  • epoll_event的概念和使用案例
  • 如何保存爬虫获取商品评论的数据?
  • 【AI时代】基于AnythingLLM+ Ollama + DeepSeek 搭建本地知识库
  • GeoHD - 一种用于智慧城市热点探测的Python工具箱
  • redis缓存与Mysql数据一致性,要如何解决?
  • Unity贴图与模型相关知识
  • GTSAM 库详细介绍与使用指南
  • DeepSeek全链路开发指南:从零搭建智能问答系统到API无缝对接【内含知识库实战】
  • 微信小程序数据绑定与事件处理:打造动态交互体验
  • 【Altium Designer】差分对等长设置以及绕线
  • Linux基本指令(三)+ 权限