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

文档序号:9910917阅读:来源:国知局
能分析结果展示。
[0113]当通过80(^16-?6忖1'0018调用。1'0;1^161'.80文件对目标进程,并进行预置采集时长的性能采集之后,需要根据预先选择的性能分析类型进行对应的性能分析结果展示,性能分析类型包括cpu性能分析和/或heap性能分析和/或内存泄露检查。
[Ο? Μ]需要说明的是,采集复数个性能数据之后,google-PerfTools的内部工具对数据进行加工,通过google-PerfTools进行分析。
[0115]步骤203至211可以是如下步骤:
[0116]a)注入进程要找到目标进程的dlopen函数的入口地址。
[0117]b)注入进程调用ptrace函数attach到目标进程T。
[0118]c)通过传递dlopen函数入口地址和prof iler.so名称到寄存器,通过ptrace调用dlopen在目标进程中加载用于动态性能分析的prof iler.so。
[0119]d)在prof ielr.so中加入一个新的函数。该函数通过注册两个signal函数让目标进程能够接收性能分析启停的信号。
[0120]e)性能剖析的采集具体是通过googlePerfTools来进行收集和分析的,这块是开源的,所以不再详细阐述。
[0121]如图7所示的操作界面,图2实施例对应的应用例包括:
[0122]Stepl.选择目标主机;
[0123]Step2.选择需要被注入的进程,即需要被分析性能及内存泄露的目标进程;
[0124]step3.选择需要性能采集的时间,默认5/10/15分钟,也可以自定义时长;
[Ο?25] Step4.选择需要性能剖析操作选项,可以是cpu性能分析/heap性能分析/内存泄露检查;
[Ο?26] Step5.性能分析结果手机与展示。
[0127]本实施例中,通过根据待注入的进程找到对应的目标进程的dlopen函数入口地址,然后通过在目标进程中附上的ptrace函数,结合dlopen函数入口地址将用于动态性能分析的prof iler.so文件加载进目标进程,最后通过google-PerfTools调用prof iler.so文件对目标进程进行性能采集,实现了基于Linux系统的性能采集分析,解决了目前常规的通过google-PerfTools来进行性能收集,在去重编译时,在性能收集之前需要进行环境变量的设置,而导致的性能收集和分析操作繁琐的技术问题,实现了一种通用的通过动态注入方法,实现对c++程序的性能剖析,无需重新编译程序及登录生产环境机器,剖析的结果可以准确用于定位cpu性能热点及内存泄露,同时也为用户带来灵活的可选项,丰富操作配置。
[0128]请参阅图3,本发明实施例中提供的一种基于Linux系统的性能采集分析的装置一个实施例包括:
[0129]确定单元301,用于确定选择的目标主机待性能分析的待注入的进程;
[0130]目标进程定位单元302,用于根据待注入的进程找到对应的目标进程的dlopen函数入口地址;
[Ο?31]性能分析文件加载单元303,用于通过在目标进程中附上的ptrace函数,结合dlopen函数入口地址将用于动态性能分析的prof i Ier.so文件加载进目标进程;
[0? 32] 性能采集分析单元304,用于通过google-PerfTools调用prof iler.so文件对目标进程进行性能采集,并获取对应的性能分析结果。
[0133]本实施例中,通过目标进程定位单元302根据待注入的进程找到对应的目标进程的dlopen函数入口地址,然后性能分析文件加载单元303通过在目标进程中附上的ptrace函数,结合dlopen函数入口地址将用于动态性能分析的prof iler.so文件加载进目标进程,最后性能采集分析单元304通过google-PerfTools调用profiler.so文件对目标进程进行性能采集,实现了基于Linux系统的性能采集分析,解决了目前常规的通过google-PerfTools来进行性能收集,在去重编译时,在性能收集之前需要进行环境变量的设置,而导致的性能收集和分析操作繁琐的技术问题。
[0134]上面是对基于Linux系统的性能采集分析的装置的各单元进行详细的描述,下面将对各子单元进行详细的描述,请参阅图4,本发明实施例中提供的一种基于Linux系统的性能采集分析的装置另一个实施例包括:
[0135]确定单元401,用于确定选择的目标主机待性能分析的待注入的进程;
[Ο?36] 确定单元401具体包括:
[0137]第一确定子单元4011,用于确定选择的目标主机的IP地址,并进行连接;
[0138]第二确定子单元4012,用于确定目标主机进行对应的待性能分析的待注入的进程的注入。
[0139]目标进程定位单元402,用于根据待注入的进程找到对应的目标进程的dlopen函数入口地址;
[0M0]目标进程定位单元402具体包括:
[0141]调用子单元4021,用于通过运行任意程序调用libc.so文件;
[0142]第一绝对地址获取子单元4022,用于任意程序运行时的agent进程通过调用dlsym函数获取dlopen函数运行时的第一绝对地址;
[Ο?43] 第一起始地址确定子单元4023,用于在agent进程内加载I ibc.so文件,以确定第一起始地址;
[Ο?44] 偏移量确定子单元4024,用于通过第一起始地址和第一绝对地址确定dlopen函数在libc.so文件中的偏移量;
[Ο?45] 起始地址确定子单元4025,用于根据待注入的进程通过libc.so文件确定加载在动态库中的注入的进程对应的起始地址;
[0146]绝对地址计算单元4026,用于根据起始地址与偏移量相加得到绝对地址,绝对地址为目标地址的dlopen函数入口地址;
[0147]ptrace函数加载子单元4027,用于注入的进程调用ptrace函数加载到目标进程。性能分析文件加载单元403,用于通过在目标进程中附上的ptrace函数,结合dlopen函数入口地址将用于动态性能分析的prof i Ier.so文件加载进目标进程;
[0148]性能分析文件加载单元403具体包括:
[0149]传递子单元4031,用于通过传递dlopen函数入口地址和prof iler.so文件的名称到寄存器;
[0150]prof iler.so文件加载子单元4032,用于通过ptrace函数调用dlopen函数在目标进程中加载用于动态性能分析的profiler, so文件。
[0151 ] 性能采集分析单元404,用于通过google-PerfTools调用prof iler.so文件对目标进程进行性能采集,并获取对应的性能分析结果。
[Ο?52]性能采集分析单元404具体包括:
[Ο?53] 信号注册子单元4041,用于通过在profiler.so文件中加入一个新函数,并对新函数注册两个用于让目标进程接收性能分析启停的信号;
[0154]性能采集子单元4042,用于通过google-PerfTools调用prof iler.so文件对目标进程,并进行预置采集时长的性能采集;
[0155]性能分析子单元4043,用于根据预先选择的性能分析类型进行对应的性能分析结果展示,性能分析类型包括cpu性能分析和/或heap性能分析和/或内存泄露检查。
[0156]本实施例中,通过目标进程定位单元402根据待注入的进程找到对应的目标进程的dlopen函数入口地址,然后性能分析文件加载单元403通过在目标进程中附上的ptrace函数,结合dlopen函数入口地址将用于动态性能分析的prof iler.so文件加载进目标进程,最后性能采集分析单元404通过google-PerfTools调用profiler.so文件对目标进程进行性能采集,实现了基于Linux系统的性能采集分析,解决了目前常规的通过google-PerfTools来进行性能收集,在去重编译时,在性能收集之前需要进行环境变量的设置,而导致的性能收集和分析操作繁琐的技术问题,实现了一种通用的通过动态注入方法,实现对c++程序的性能剖析,无需重新编译程序及登录生产环境机器,剖析的结果可以准确用于定位cpu性能热点及内存泄露,同时也为用户带来灵活的可选项,丰富操作配置。
[0157]请参阅图5,本发明实施例中提供的一种基于Linux系统的性能采集分析的系统的一个实施例包括:
[Ο?58] 后台agent51、TcpProxy52,以及如图3和图4所示实施例的基于Linux系统的性能采集分析的装置53,基于Linux系统的性能采集分析的装置53可以是web前端的终端;
[Ο?59] 基于Linux系统的性能采集分析的装置53通过TcpProxy52与后台agent51连接;[Ο??Ο]后台agent51通过获取到来自于基于Linux系统的性能采集分析的装置53的指令对目标主机进行注入目标进行后的性能的采集,并通过TcpProxy52反馈给基于Linux系统的性能采集分析的装置53。
[0161]TcpPrOXy52,用于部署在能够连通不同运营商网络的机房,作为后台和前端通信的路由节点。因为真实的部署的机房包括电信、联通、教育三大网络运营商。各个运营商之间的机房网络互通质量较差,为了解决agent与web前端的网络互通问题,设置proxy来透传数据满足互通问题。
[0162]本实施例中,通过根据待注入的进程找到对应的目标进程的dlopen函数入口地址,然后通过在目标进程中附上的ptrace函数,结合dlopen函数入口地址将用于动态性能分析的prof iler.so文件加载进目标进程,最后通过google-PerfTools调用prof iler.so文件对目标进程进行性能采集,实现了基于Linux系统的性能采集分析,解决了目前的通过google-PerfTools来进行性能收集,去重编译需要带上google的库中的prof iler才能进行性能收集,
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1