首页 > 编程语言 >一个非侵入式跟踪分析程序

一个非侵入式跟踪分析程序

时间:2024-06-24 09:03:09浏览次数:27  
标签:otel profiling Java 程序 分析程序 agent 编译 跟踪 侵入

      otel-profiling-agent为elastic开源项目,用于对生产环境中的应用程序进行性能分析,帮助开发者理解程序的运行情况,识别瓶颈,优化性能。用于包括CPU和内存使用情况的分析、调用跟踪、性能指标收集等功能。它是一个用于Linux的全系统、跨语言的性能分析器,通过eBPF(Extended Berkeley Packet Filter)实现,eBPF 起初是为了网络数据包过滤而设计的,但其功能已经大幅扩展,现在它可以用于各种内核子系统,包括但不限于网络、安全、性能监控、系统跟踪和诊断等。
      根据官方描述其有如下特点:
1、CPU和内存占用极低(测试中上限为1% CPU和250MB内存)。
2、支持原生C/C++程序,无需DWARF调试信息。
3、支持无框架指针和无主机调试符号的系统库分析。
4、支持混合堆栈跟踪,从内核空间到高级语言。
5、支持多种语言的原生代码分析,无需主机上的调试符号。
6、支持广泛的高级语言(HLLs),如JVM、Python、Ruby、PHP、Node.js、V8、Perl等,.NET正在准备中。
7、100%非侵入性,无需在被分析的进程中加载代理或库。
不需要重新配置、仪器化或重启HLL解释器和VM,代理支持在默认配置中展开每种支持的语言。
8、支持原生inline frames,提供编译器优化的洞察并提供更高精确度的函数调用链。

现有实现

      有了它在对Java程序进行性能分析时就可以在极低的性能损失下进行,目前的Java程序性能分析/跟踪实现都是基于Java Agent方案实现的。基于Java Agent是在对的程序侵入性下进行的,侵入性意味着对程序可能会照成比较大影响代码逻辑、性能、系统资源等,还可能因为该程序的漏洞导致生产程序出现安全性问题。
      在基于Java Agent的方案下分析/跟踪Java程序的性能损失极端情况下可能达到10%或导致程序崩溃,这对生产环境下的程序影响比较大。
      而otel-profiling-agent可以在极低资源占用下实现对Java程序进行非侵入式的跟踪分析。

使用

      官方并没有提供编译好的otel-profiling-agent文件,如想尝试可自己编译该项目生成二进制文件。除了源码编译外官方还提供了基于Docker镜像的编译文件,可使用Docker编译减少编译环境导致的问题。
      编译完成后可运行如下指令:

sudo ./otel-profiling-agent -collection-agent=127.0.0.1:11000 -disable-tls

1.png

      注意,运行上面指令需要先开启一个采集器代理用于接收otel-profiling-agent上报的监控数据,如没有启动代理该程序无法启动。官方提供了devfiler桌面应用程序用于通过火焰图可视化采集数据。

2.png
collection-agent所接收的数据

3.png
devfiler可视化

      启动程序即可通过采集器观察到otel-profiling-agent所上报的数据。otel-profiling-agent为一个gRPC客户端程序,采集器为一个gRPC服务端程序。
      由于otel-profiling-agent刚开源,目前相关周边生态支持还不够完善,官方提供了一个devfiler桌面应用程序,用于本地可视化代理输出的工具。opentelemetry-collector对otel-profiling-agent也还没有支持。目前官方正在筹备将其捐赠给OpenTelemetry基金会。

仓库地址:https://github.com/elastic/otel-profiling-agent

标签:otel,profiling,Java,程序,分析程序,agent,编译,跟踪,侵入
From: https://www.cnblogs.com/softlin/p/18263302

相关文章

  • 使用粒子滤波(particle filter)进行视频目标跟踪
    虽然有许多用于目标跟踪的算法,包括较新的基于深度学习的算法,但对于这项任务,粒子滤波仍然是一个有趣的算法。所以在这篇文章中,我们将介绍视频中的目标跟踪:预测下一帧中物体的位置。在粒子滤波以及许多其他经典跟踪算法的情况下,我们根据估计的动态进行预测,然后使用一些测量值更新预......
  • 横向LQR、纵向PID控制进行轨迹跟踪以及python实现
    横向LQR、纵向PID控制进行轨迹跟踪以及python实现附赠自动驾驶最全的学习资料和量产经验:链接一、LQR问题模型建立:理论部分比较成熟,这里只介绍demo所使用的建模方程:使用离散代数黎卡提方程求解系统状态矩阵:输入矩阵:A矩阵:B矩阵:二、代码实现#导入相关包imp......
  • incident产生大量跟踪文件,导致空间不足,如何对其进行清理
    11gOracle提供了ADRCI命令行工具,adrci位置在$ORACLE_HOME/bin目录下,可针对其批量删除调用adrci[oracle@orclskts~]$adrciADRbase="/u01/app/oracle"adrci>查看目录adrci>showhomeADRHomes:diag/rdbms/orcl/orclskdiag/rdbms/orclsk/orclskdiag/rdbms/orclsk/......
  • 数仓sql场景:连续跟踪问题
    1.需求查询用户连续追踪客户的开始时间和结束时间,以下两种场景都需支持第一种场景:连续:中间没有断,如a追踪客户小明,第1次开始为2023-01-01,结束时间为:2023-01-03;第2次开始为2023-01-04,结束时间为:2023-01-07,则追踪时间为开始时间为2023-01-01,结束时间为:2023-01-07不连续:中间有段,如......
  • Java项目-基于ssm+vue的大学生兼职跟踪系统(源码+数据库+文档)​
    如需完整项目,请私信博主基于ssm+Vue的大学生兼职跟踪系统开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven本文以Java为开发技术,实现了一个大学生兼职跟踪系统。大学生兼职跟踪系统的主要实现功能包括:管理员:首页、个人中心、商......
  • 无代码侵入自动生成API接口文档——EasyYapi
    无代码侵入自动生成API接口文档——EasyYapi在idea中下载EasyYapi插件配置EasyYapi插件(基本都是这步存在问题)server配置很多服务器都配置了代理,所以这个地址很容易填写错误(我多配置了/yapi),这里只是yapi服务器地址,他会自动加/yapi,如果代理规则也是这个,那么就是代理服务器地址......
  • 闲鱼商品监控:使用商品详情数据接口跟踪价格变动
    使用闲鱼商品详情数据接口跟踪价格变动在二手市场和电商领域,价格是一个重要的动态因素,它可以受到多种因素的影响,如供求关系、季节变化、市场趋势等。对于买家而言,跟踪商品价格的变动可以帮助他们抓住最佳购买时机,节省开支;对于卖家而言,合理的定价策略能够吸引更多买家,提高销售......
  • DeepSORT(目标跟踪算法)中卡尔曼增益的理解
    DeepSORT(目标跟踪算法)中卡尔曼增益的理解flyfish先用最简单的例子来理解卡尔曼增益公式(1)首先,通过多次测量一个物理量,并使用取平均值的方式来计算其真实值:x......
  • 基于压电陶瓷传感器的智能枕头非侵入式生命体征监测
    一、摘要在家中睡眠期间对人体生命体征进行实时监测对于实现及时检测和救援至关重要。然而,现有的用于监测人类生命体征的智能设备存在高复杂性、高成本、侵入性或低准确性的缺点。因此,迫切需要开发一种简化、无干扰、舒适、低成本的睡眠实时监测系统。在本研究中,基于低成本的压电......
  • LangChain AgentExecutor invoke跟踪记录(一)
    目的追踪与调用LLM相关的整条链路,用于理解langchainAgent调用LLM时整个输入输出逻辑,方便后续针对不同LLM做改造适配跟踪记录第一步自然是导进chains\base.py的invoke函数,在这里经过简单的输入验证后进入self._calltry:self._validate_inputs(inputs)......