linux 性能采集,一种基于Linux系统的性能采集分析的方法、装置及系统的制作方法...

一种基于Linux系统的性能采集分析的方法、装置及系统的制作方法

【技术领域】

[0001]本发明涉及计算机技术领域,尤其涉及一种基于Linux系统的性能采集分析的方法、装置及系统。

【背景技术】

[0002]内存泄漏也称作“存储渗漏”,用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏。内存泄漏形象的比喻是“操作系统可提供给所有进程的存储空间正在被某个进程榨干”,最终结果是程序运行时间越长,占用存储空间越来越多,最终用尽全部存储空间,整个系统崩溃。所以“内存泄漏”是从操作系统的角度来看的。这里的存储空间并不是指物理内存,而是指虚拟内存大小。

[0003]对于内存泄露需要通过性能采集,评估软件运行时系统的整体性能,定位到CPU性能热点,具体定位到是哪段代码、哪个函数耗时较大,目前性能剖析的采集具体是通过google-PerfTools来进行收集和分析的,就是通过采样的方式,给程序中cpu的使用情况进行“画像”,通过它所输出的结果,可以对程序中各个函数(得到函数之间的调用关系)耗时情况一目了然。在对程序做性能优化的时候,先把最耗时的若干个操作优化好,程序的整体性能提升十分明显,也是做性能优化的一个最为基本的原则一先优化最耗时的。

[0004]然而,目前常规的通过google-PerfTools来进行性能收集,在去重编译时,在性能收集之前需要进行环境变量的设置,从而导致了性能收集和分析操作繁琐的技术问题。

【发明内容】

[0005]本发明实施例提供的一种基于Linux系统的性能采集分析的方法、装置及系统,解决了目前常规的通过google-PerfTools来进行性能收集,在去重编译时,在性能收集之前需要进行环境变量的设置,而导致的性能收集和分析操作繁琐的技术问题。

[0006]本发明实施例提供的一种基于Linux系统的性能采集分析的方法,包括:

[0007]确定选择的目标主机待性能分析的待注入的进程;

[0008]根据待注入的所述进程找到对应的目标进程的dlopen函数入口地址;

[0009]通过在所述目标进程中附上的ptrace函数,结合所述dlopen函数入口地址将用于动态性能分析的prof iler.so文件加载进所述目标进程;

[0010]通过google-PerfTools调用所述prof iler.SO文件对所述目标进程进行性能采集,并获取对应的性能分析结果。

[0011]可选地,确定选择的目标主机待性能分析的待注入的进程具体包括:

[0012]确定选择的目标主机的IP地址,并进行连接;

[0013]确定目标主机进行对应的待性能分析的待注入的所述进程的注入。

[0014]可选地,根据待注入的所述进程找到对应的目标进程的dlopen函数入口地址具体包括:

[0015]通过运行任意程序调用I ibc.so文件;

[0016]所述任意程序运行时的agent进程通过调用dlsym函数获取dlopen函数运行时的第一绝对地址;

[00? 7]在所述agent进程内加载所述I ibc.so文件,以确定第一起始地址;

[0018]通过所述第一起始地址和所述第一绝对地址确定所述dlopen函数在所述I ibc.so文件中的偏移量;

[0019]根据待注入的所述进程通过所述libc.so文件确定加载在动态库中的注入的所述进程对应的起始地址;

[0020]根据所述起始地址与所述偏移量相加得到绝对地址,所述绝对地址为所述目标地址的所述d I op en函数入口地址;

[0021]注入的所述进程调用所述ptrace函数加载到所述目标进程。

[0022]可选地,通过在所述目标进程中附上的P trace函数,结合所述dlopen函数入口地址将用于动态性能分析的prof i Ier.so文件加载进所述目标进程具体包括:

[0023]通过传递所述dlopen函数入口地址和所述prof iler.so文件的名称到寄存器;

[0024]通过所述ptrace函数调用dlopen函数在目标进程中加载用于动态性能分析的所述 profiler.so 文件。

[0025]可选地,通过google-PerfTools调用所述prof iler.so文件对所述目标进程进行性能采集,并获取对应的性能分析结果具体包括:

[0026]通过在所述prof iler.so文件中加入一个新函数,并对所述新函数注册两个用于让所述目标进程接收性能分析启停的信号;

[0027]通过google-PerfTools调用所述prof iler.so文件对所述目标进程,并进行预置采集时长的性能采集;

[0028]根据预先选择的性能分析类型进行对应的性能分析结果展示,所述性能分析类型包括cpu性能分析和/或heap性能分析和/或内存泄露检查。

[0029]本发明实施例提供的一种基于Linux系统的性能采集分析的装置,包括:

[0030]确定单元,用于确定选择的目标主机待性能分析的待注入的进程;

[0031 ]目标进程定位单元,用于根据待注入的所述进程找到对应的目标进程的dlopen函数入口地址;

[0032]性能分析文件加载单元,用于通过在所述目标进程中附上的ptrace函数,结合所述dlopen函数入口地址将用于动态性能分析的prof i Ier.so文件加载进所述目标进程;

[0033]性能采集分析单元,用于通过google-PerfTools调用所述profiler.so文件对所述目标进程进行性能采集,并获取对应的性能分析结果。

[0034]可选地,确定单元具体包括:

[0035]第一确定子单元,用于确定选择的目标主机的IP地址,并进行连接;

[0036]第二确定子单元,用于确定目标主机进行对应的待性能分析的待注入的所述进程的注入。

[0037]可选地,目标进程定位单元具体包括:

[0038]调用子单元,用于通过运行任意程序调用Iibc.so文件;

[0039]第一绝对地址获取子单元,用于所述任意程序运行时的agent进程通过调用dlsym函数获取dlopen函数运行时的第一绝对地址;

[0040]第一起始地址确定子单元,用于在所述agent进程内加载所述I ibc.so文件,以确定第一起始地址;

[0041 ]偏移量确定子单元,用于通过所述第一起始地址和所述第一绝对地址确定所述dlopen函数在所述I ibc.so文件中的偏移量;

[0042]起始地址确定子单元,用于根据待注入的所述进程通过所述libc.so文件确定加载在动态库中的注入的所述进程对应的起始地址;

[0043]绝对地址计算单元,用于根据所述起始地址与所述偏移量相加得到绝对地址,所述绝对地址为所述目标地址的所述dlopen函数入口地址;

[0044]ptrace函数加载子单元,用于注入的所述进程调用所述ptrace函数加载到所述目标进程。

[0045]可选地,性能分析文件加载单元具体包括:

[0046]传递子单元,用于通过传递所述dlopen函数入口地址和所述prof iler.so文件的名称到寄存器;

[0047]profiler.so文件加载子单元,用于通过所述ptrace函数调用dlopen函数在目标进程中加载用于动态性能分析的所述profiler, so文件。

[0048]可选地,性能采集分析单元具体包括:

[0049]信号注册子单元,用于通过在所述prof iler.so文件中加入一个新函数,并对所述新函数注册两个用于让所述目标进程接收性能分析启停的信号;

[0050]性能采集子单元,用于通过800816-?6忖1'0018调用所述口1'0;1^161'.80文件对所述目标进程,并进行预置采集时长的性能采集;

[0051]性能分析子单元,用于根据预先选择的性能分析类型进行对应的性能分析结果展示,所述性能分析类型包括cpu性能分析和/或heap性能分析和/或内存泄露检查。

[0052]本发明实施例提供的一种基于Linux系统的性能采集分析的系统,其特征在于,包括:

[0053]后台agent、TcpProxy,以及本实施例中提及的任意一种所述的基于Linux系统的性能采集分析的装置;

[0054]所述基于Linux系统的性能采集分析的装置通过所述TcpProxy与所述后台agent连接;

[0055]所述后台agent通过获取到来自于所述基于Linux系统的性能采集分析的装置的指令对目标主机进行注入目标进行后的性能的采集,并反馈给所述基于Linux系统的性能采集分析的装置。

[0056]从以上技术方案可以看出,本发明实施例具有以下优点:

[0057]本发明实施例提供的一种基于Linux系统的性能采集分析的方法、装置及系统,其中,通过动态注入进行性能采集的方法包括:确定选择的目标主机待性能分析的待注入的进程;根据待注入的进程找到对应的目标进程的dlopen函数入口地址;通过在目标进程中附上的ptrace函数,结合dlopen函数入口地址将用于动态性能分析的prof iler.so文件加载进目标进程;通过google-PerfTools调用prof iler.so文件对目标进程进行性能采集,并获取对应的性能分析结果。本实施例中,通过根据待注入的进程找到对应的目标进程的dlopen函数入口地址,然后通过在目标进程中附上的ptrace函数,结合dlopen函数入口地址将用于动态性能分析的prof iler.so文件加载进目标进程,最后通过google-Perf Too I s调用profiler, so文件对目标进程进行性能采集,实现了基于Linux系统的性能采集分析,解决了目前常规的通过google-PerfTools来进行性能收集,在去重编译时,在性能收集之前需要进行环境变量的设置,而导致的性能收集和分析操作繁琐的技术问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值