发明内容
本发明所要解决的技术问题和提出的技术任务是对现有技术进行改进,提供了一种获取远程终端的性能火焰图的方法、装置及系统。
根据本公开实施例的第一方面,提供了一种获取远程终端的性能火焰图的方法,所述方法包括以下步骤:
S1.在远程终端设置远程终端性能数据采集模块;
S2.远程终端性能数据采集模块响应于本地终端的请求记录远程终端的性能数据;
S3.根据记录的远程终端的性能数据生成远程终端的性能火焰图并发回给本地终端。
在一种可选的实施方式中,所述步骤S2进一步包括以下步骤:
S201.在本地终端和远程终端之间建立远程调用通信;
S202.响应于本地终端的请求开始记录远程终端的性能数据;
S203.响应于本地终端的请求停止记录远程终端的性能数据。
在一种可选的实施方式中,在本地终端和远程终端之间建立远程调用通信包括通过web service通讯协议建立在本地终端和远程终端之间的远程调用通信。
在一种可选的实施方式中,步骤S2进一步包括通过perf工具采集原始的远程终端的性能数据以及通过perf工具将采集的远程终端的性能数据转化为远程终端的性能火焰图。
在一种可选的实施方式中,步骤S2进一步包括:设置一时间周期,远程终端性能数据采集模块每次响应于本地终端的请求而记录所述时间周期内远程终端的性能数据。
根据本发明实施例的第二方面,提供了一种获取远程终端的性能火焰图的装置,所述装置包括:
存储器,用于存储一应用程序;
处理器,用于运行所述应用程序以执行上述的方法。
根据本发明实施例的第三方面,提供了一种获取远程终端的性能火焰图的系统,所述系统包括:
远程终端性能数据采集模块,其配置为采集和记录远程终端的性能数据;
数据采集请求模块,其配置向远程终端性能数据采集模块发送本地终端的数据采集请求;
远程终端的性能火焰图生成模块,其配置为根据记录的远程终端的性能数据生成远程终端的性能火焰图并发回给本地终端。
在一种可选的实施方式中,所述系统进一步包括:
通信模块,其配置为在本地终端和远程终端之间建立远程调用通信。
在一种可选的实施方式中,所述系统进一步包括:
数据采集周期控制模块,其配置为设置一时间周期,使得远程终端性能数据采集模块每次响应于本地终端的请求而记录所述时间周期内远程终端的性能数据。
在一种可选的实施方式中,所述系统进一步包括:
云端存储模块,配置为将本地终端下载的远程终端的性能火焰进行存储备份。
本发明的实施例提供的技术方案具有以下有益效果:
通过本发明提供的一种获取远程终端的性能火焰图的方法、装置及系统,通过启动则开始采样数据;终止则获取图片。将原来本领域中需要五步或者更多步的重复操作简化到两步,且执行简单,只需要在预先设置好的交互页面上操作即可。可以极大的节约人工重复劳动的成本,提升了获取终端火焰图的效率。本发明就是用来解决现有技术存在的低效率问题,极大方便远程获取指定终端的火焰图,为查找性能瓶颈提供有力支持。本申请的技术方案实现了针对采集数据到生成图片封装化,采样数据简易化,能够远程获取指定机器的采样数据。其中,封装化,即整个火焰图的获取命令的执行,完全不可见,皆为后台代码封装实现。不需要用户了解整个火焰图的获取命令如何执行,也不需要关心其各个参数的含义,部署简单,操作方便。
具体实施方式
下面将结合本发明实施例中的附图1-8,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括复数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。
如图1所示,图1是根据一示例性实施例示出的一种获取远程终端的性能火焰图的方法,所述方法包括以下步骤:
在步骤S1中,在远程终端设置远程终端性能数据采集模块;在该步骤中,可以设置具有不同数据采集能力的远程终端性能数据采集模块。例如,针对不同类型的采集需求,比如对 CPU、存储器(memory)等不同构件或模块进行的数据采集是不同的,我们可以相应设置具有着不同采集能力的数据采集模块,从而能够针对不同的需求采集相应的数据信息。
在步骤S2中,远程终端性能数据采集模块响应于本地终端的请求记录远程终端的性能数据;对应与上一步骤,本地终端可以根据不同的需求而发送不同的请求,从而实现采集不同的性能数据。
在步骤S3中,根据记录的远程终端的性能数据生成远程终端的性能火焰图并发回给本地终端。
如图2所示,作为本公开一优选的实施例,在步骤S2中,远程终端性能数据采集模块响应于本地终端的请求记录远程终端的性能数据的步骤具体包括以下几步:
在步骤S201中,在本地终端和远程终端之间建立远程调用通信;
在步骤S202中,响应于本地终端的请求开始记录远程终端的性能数据;
在步骤S203中,响应于本地终端的请求停止记录远程终端的性能数据。
如图3所示,步骤S2进一步包括以下步骤:通过web service通讯协议建立在本地终端和远程终端之间的远程调用通信。
作为优选的实施例,步骤S2进一步包括通过perf工具采集原始的远程终端的性能数据以及通过perf工具将采集的远程终端的性能数据转化为远程终端的性能火焰图。现有技术为例,采用例如使用Linux系统中的perf工具,要得到性能火焰图,通常有以下几步:第一步: $sudo perf record -e cpu-clock -g -p 28591;Ctrl+c结束执行后,在当前目录下会生成采样数据 perf.data.;第二步:用perf script工具对perf.data进行解析;perfscript-i perf.data&>perf.unfold;第三步:将perf.unfold中的符号进行折叠:#./stackcollapse-perf.pl;perf.unfold&>perf.folded。第四步:生成svg图:./flamegraph.pl perf.folded>perf.svg。本申请通过封装化:即整个perf 命令的执行,完全不可见。皆为后台代码封装实现。不需要用户了解perf命令如何使用,也不需要关心其各个参数的含义,具体实现见如下程序步骤:包括
以上为封装的核心代码:第一个方法利用python操作本机perf命令,采集数据,形成原始文件;第二个方法利用python操作本机perf转化命令,将原始文件转化为可以生成图片的格式;另一个封装测试将格式化的文件生成svg火焰图。
本申请实现的简易化:启动则开始采样数据;终止则获取图片。将原来五步操作简化到两步,且执行简单。页面上操作即可,具体实现见如下示例性程序:
上面为页面操作的核心代码:第一个步骤远程调用web接口,启动远程数据的采集;第二个步骤远程调用web接口,终止远程数据的采集,转化数据,生成图片,下载到本地终端。
通过上述技术方案,本申请实现了远程化:即可以获取远程终端的性能火焰图。为实现这个目标,则可以在远程服务端部署一个web服务。其提供两个步骤:start(启动采样)stop(终止采样并生成火焰图供下载)。该方案主要为后端运行工具,其主要采用python、perf工具、 perf script、flamegraph.pl工具、flask框架实现,整体流程为:1、远程机器部署数据采集web 服务,并开放指定端口;2、启动start方法,开始核心数据采集;3、启动stop方法,终止采集,转化数据,下载图片;4、查看火焰图,查找性能瓶颈点。
通过上边的几个步骤,就可以方便简洁的得到远程机器的火焰图,而且可以持续的获取火焰图,直至找到问题为止。简单地讲就是,一键采样性能数据,并得到火焰图,供研发参考。
当然上述实施例是通过使用Linux系统中的perf工具实现的,根据不同实施例,本申请可以使用不同平台的分析工具,包括但不限制于:Linux:perf,eBPF,SystemTap和ktap; Solaris,illumos,FreeBSD:DTrace;Mac OS X:DTrace和Instruments;Windows:Xperf.exe。
作为优选的实施例进一步,步骤S2进一步包括:设置一时间周期,远程终端性能数据采集模块每次响应于本地终端的请求而记录所述时间周期内远程终端的性能数据。
如图3所示,作为本公开实施例的另一方面,提供了一种获取远程终端的性能火焰图的装置,装置包括:
存储器,用于存储一应用程序;
处理器,用于运行所述应用程序以执行上述任一项实施例中所描述的方法。
其中,所述的存储器可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
相应地,本发明实施例还提供了一种获取远程终端的性能火焰图的服务器,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现上述实施例从而自动远程终端的性能火焰图。
所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述压测服务器的控制中心,利用各种接口和线路连接整个压测服务器的各个部分。
与前述方法实施例相对应,本发明还提供了系统的实施例。对于系统实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以下所描述的系统实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本公开方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
如图4所示,作为本公开实施例的另一方面,提供了一种获取远程终端的性能火焰图的系统,所述系统包括:
远程终端性能数据采集模块101,其配置为采集和记录远程终端的性能数据;
数据采集请求模块102,其配置向远程终端性能数据采集模块发送本地终端的数据采集请求;
远程终端的性能火焰图生成模块103,其配置为根据记录的远程终端的性能数据生成远程终端的性能火焰图并发回给本地终端。
如图5所示,根据一优选的实施例,所述系统进一步包括:通信模块104,其配置为在本地终端和远程终端之间建立远程调用通信。
如图6所示,根据另一优选的实施例,所述系统进一步包括:数据采集周期控制模块105,其配置为设置一时间周期,使得远程终端性能数据采集模块每次响应于本地终端的请求而记录所述时间周期内远程终端的性能数据。
如图7所示,根据进一步优选的实施例,所述系统进一步包括:云端存储模块106,配置为将本地终端下载的远程终端的性能火焰进行存储备份。
图8为根据本发明的一实施例获得的远程终端的性能火焰图。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括是电载波信号和电信信号。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。