CN113051122A - 性能数据获取方法、装置、电子设备和介质 - Google Patents
性能数据获取方法、装置、电子设备和介质 Download PDFInfo
- Publication number
- CN113051122A CN113051122A CN201911367621.2A CN201911367621A CN113051122A CN 113051122 A CN113051122 A CN 113051122A CN 201911367621 A CN201911367621 A CN 201911367621A CN 113051122 A CN113051122 A CN 113051122A
- Authority
- CN
- China
- Prior art keywords
- code
- monitoring
- code segment
- plug
- loading
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3089—Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
- G06F11/3093—Configuration details thereof, e.g. installation, enabling, spatial arrangement of the probes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3065—Monitoring arrangements determined by the means or processing involved in reporting the monitored data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种性能数据获取方法、装置、电子设备和介质,涉及计算机技术领域。具体实现方案为:在检测到宿主程序启动完成后,向所述宿主程序对应的宿主进程发送加载指令;所述宿主进程基于所述加载指令加载用于对所述宿主程序进行性能监控的监控代码包后,通过运行加载的所述监控代码包中的监控代码,采集所述宿主程序的性能数据。本申请实施例当对宿主程序添加、卸载和升级监控代码包时,无需修改启动脚本和重启应用,避免了重启应用带来的流量损失,且解决了修改启动脚本导致的难以规模化运营监控的问题。
Description
技术领域
本申请涉及计算机技术领域,具体涉及数据采集技术,尤其涉及一种性能数据获取方法、装置、电子设备和介质。
背景技术
业务应用通常构建在不同的JAVA微服务模块上,这些模块架构各异且应用数目庞大。因此,需要一些帮助理解系统行为和用于分析性能问题的工具。
现有的JAVA应用性能数据采集方法主要包括三种:(1)直接在业务代码中开发监控代码。(2)在业务程序中,设置专门的监控逻辑,增加配置文件来统一添加监控代码。(3)使用java agent技术加载监控核心jar包。
上述第一种方法中监控代码与业务代码完全耦合,导致性能监控需要业务人员大量开发,成本较高。第二种方法中需要对业务代码的配置文件进行大量改动。一旦业务升级,很可能导致监控不可用。第三种方法解决了前两种方法的问题,但是无论是添加、卸载还是升级监控程序,都需要修改启动脚本并重启应用,重启应用是对流量有损的,修改启动脚本难以规模化运营监控,这种方式难以适应大规模、复杂的线上应用。
发明内容
本申请提供一种性能数据获取方法、装置、电子设备和介质,以解决现有应用性能数据采集方法会导致应用流量损失,且难以规模化运营监控的问题。
第一方面,本申请实施例公开了一种性能数据获取方法,所述方法包括:
在检测到宿主程序启动完成后,向所述宿主程序对应的宿主进程发送加载指令;
在所述宿主进程基于所述加载指令加载用于对所述宿主程序进行性能监控的监控代码包后,通过运行加载的所述监控代码包中的监控代码,采集所述宿主程序的性能数据。
上述申请中的一个实施例具有如下优点或有益效果:实现了当对宿主程序添加监控代码包时,无需修改启动脚本和重启应用的效果,避免了重启应用带来的流量损失,且解决了修改启动脚本导致的难以规模化运营监控的问题。
可选的,所述监控代码包包括监控代码段和插件代码段;其中,所述监控代码段中包含用于执行预设性能数据采集操作的监控代码,所述插件代码段中包含用于确定各所述监控代码段在所述宿主程序的业务代码段中的加载位置的代码;
相应的,加载用于对所述宿主程序进行性能监控的监控代码包,包括:
通过执行所述插件代码段确定所述加载位置,根据确定结果将所述监控代码段加载到所述业务代码段中的相应位置处。
上述申请中的一个实施例具有如下优点或有益效果:通过执行插件代码段确定加载位置,根据加载位置将监控代码段加载到业务代码段中,使得监控代码段不会影响业务代码段的正常执行,避免报错,并为后续运行监控代码段中的监控代码,采集宿主程序性能数据,奠定了基础。
可选的,所述监控代码包还包括跳转代码段,其中,所述跳转代码段中包含至少一个接口以及各接口所引用的插件标识;以及,所述插件代码段还包含所述接口对应的功能实现代码;
相应的,通过运行加载的所述监控代码包中的监控代码,采集所述宿主程序的性能数据,包括:
执行所述监控代码中的接口调用语句,根据所述跳转代码段确定所述接口调用语句所调用接口所引用的插件标识,并通过调用所述插件标识对应的插件代码段中的功能实现代码,来执行所述预设性能数据采集操作。
上述申请中的一个实施例具有如下优点或有益效果:通过根据跳转代码段,确定调用接口所引用的插件标识,并根据所述插件标识对应的插件代码段中的功能实现代码,执行预设性能数据采集操作,使得除了运行监控代码段中的监控代码来实现性能数据采集之外,还可以通过调用目标功能实现代码来实现性能数据采集,满足了用户对于性能数据采集需求的多样性,且使得性能数据采集结果的可靠性更高。
可选的,所述监控代码包还包括代理代码段,其中,所述代理代码段中包含各插件代码段共享的公共类,以使各插件代码段中的功能实现代码通过调用所述公共类来执行预设性能数据采集操作。
上述申请中的一个实施例具有如下优点或有益效果:通过各插件代码段中的功能实现代码调用代理代码段中包含共享的公共类中的方法,使得功能实现代码可以实现预设性能数据采集操作的效果。
可选的,所述方法还包括:
将所述监控代码段、插件代码段、代理代码段和跳转代码段分别加载在不同的类加载容器中,并将不同的插件代码段加载在不同的类加载容器中;其中,所述类加载容器是用于运行和解释代码中类的容器。
上述申请中的一个实施例具有如下优点或有益效果:通过将监控代码段、插件代码段、代理代码段和跳转代码段分别加载在不同的类加载容器中,使得业务代码和监控代码包中的各代码段互相隔离,且监控代码包中的各代码段也相互隔离,保证了监控代码包可以加载不同的类到业务代码中去而不会报错,且也不会影响业务代码的正常执行。
可选的,所述方法还包括:
在通过预先创建的类加载监听器,监听到所述监控代码中的监控类被加载到所述业务代码段中时,通过类转换器对所述监控类进行增强处理,以使所述监控类与所述业务代码段进行混合。
上述申请中的一个实施例具有如下优点或有益效果:通过类加载监听器监听到监控类被加载到业务代码段中时,通过类转换器对监控类进行增强处理,使得监控代码段中的监控类可以与业务代码段进行混合,保证了对宿主程序性能数据采集操作的正常执行。
可选的,所述方法还包括:
在所述宿主进程扫描到预设文件中写入了预设卸载命令时,根据跳转代码段中的卸载逻辑,执行对所述增强处理的移除操作,关闭所述宿主进程中用于执行监控相关操作的线程,并在定时回收内存时,将跳转代码段中对插件代码段的引用回收掉。
上述申请中的一个实施例具有如下优点或有益效果:通过根据跳转代码段中的卸载逻辑,执行对增强处理的移除操作,关闭用于执行监控相关操作的线程,并在定时回收内存时,将跳转代码段中对插件代码段的引用回收掉,完成了对监控代码包的卸载操作,且卸载时无需修改启动脚本和重启应用,避免了重启应用带来的流量损失,且解决了修改启动脚本导致的难以规模化运营监控的问题。
可选的,执行对所述增强处理的移除操作,包括:
将所述类加载监听器删除;
将通过类转换器已进行了增强处理的监控类中的植入代码删除;
将删除植入代码后的监控类重新加载到所述监控代码段所在的类加载容器中。
上述申请中的一个实施例具有如下优点或有益效果:通过删除类加载监听器,删除监控类中的植入代码,将删除植入代码后的监控类重新加载到监控代码段所在的类加载容器中,实现了对增强处理的移除操作,使得业务代码不再与监控类进行混合。
可选的,所述方法还包括:
在接收到热替换命令时,向所述宿主进程发送重新加载指令;
当所述宿主进程接收到所述重新加载指令后,确定是否已加载有监控代码包,若是,则将已加载的监控代码包卸载,并根据所述重新加载指令加载新的监控代码包;
否则,直接根据所述重新加载指令加载新的监控代码包。
上述申请中的一个实施例具有如下优点或有益效果:通过向宿主进程发送重新加载指令,使得宿主进行根据重新加载指令,卸载已加载的监控代码包,加载新的监控代码包,实现了对宿主进程中的监控代码包进行热替换的效果。
可选的,确定是否已加载有监控代码包,包括:
确定跳转代码段所在的类加载容器中是否存在已加载的跳转代码段;
若是,则确定已加载有监控代码包,否则,确定未加载有监控代码包。
上述申请中的一个实施例具有如下优点或有益效果:通过确定跳转代码段所在的类加载容器中是否存在已加载的跳转代码段,实现了对是否已加载有监控代码包的判定,为后续确定是否执行卸载已加载的监控代码包的操作,奠定了基础。
第二方面,本申请实施例还公开了一种性能数据获取装置,该装置包括:
引导代码包加载模块,用于在检测到宿主程序启动完成后,向所述宿主程序对应的宿主进程发送加载指令;
性能数据采集模块,用于在所述宿主进程基于所述加载指令加载用于对所述宿主程序进行性能监控的监控代码包后,通过运行加载的所述监控代码包中的监控代码,采集所述宿主程序的性能数据。
第三方面,本申请实施例还公开了一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本申请任意实施例所述的性能数据获取方法。
第四方面,本申请实施例还公开了一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使所述计算机执行本申请任意实施例所述的性能数据获取方法。
上述可选方式所具有的其他效果将在下文中结合具体实施例加以说明。
附图说明
附图用于更好地理解本方案,不构成对本申请的限定。其中:
图1A是根据本申请第一实施例的一种性能数据获取方法的流程示意图;
图1B是根据本申请第一实施例的一种插件代码段调用示意图;
图1C是根据本申请第一实施例的一种类加载容器的层级结构示意图;
图2是根据本申请第二实施例的一种性能数据获取方法的流程示意图;
图3是根据本申请第三实施例的一种性能数据获取方法的流程示意图;
图4是根据本申请第四实施例的一种性能数据获取装置的结构示意图;
图5是用来实现本申请实施例的拓扑关系查询方法的电子设备的框图。
具体实施方式
以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
实施例一
图1A为本申请实施例一提供的一种性能数据获取方法的流程示意图。本实施例适用于采集宿主程序性能数据的情况,可以由本申请实施例提供的性能数据获取装置来执行,该装置可以采用软件和/或硬件的方式实现。如图1所示,该方法可以包括:
S101、在检测到宿主程序启动完成后,向所述宿主程序对应的宿主进程发送加载指令。
其中,具体是通过当前服务器上第一虚拟机中启动的服务进程,检测第二虚拟机中宿主程序的启动情况,并在检测到宿主程序启动完成后,向宿主程序对应的宿主进程发送加载指令。虚拟机指的是通过软件模拟的具有完整硬件系统功能的且运行在一个完全隔离环境中的完整计算机系统。第一虚拟机与第二虚拟机的类型包括但不限于Mac虚拟机、BM虚拟机、HP虚拟机、AMD虚拟机以Java虚拟机等。宿主程序的类型包括但不限于操作系统、服务器程序和应用程序等。宿主进程体现了对应宿主程序的运行过程,通过控制宿主进程即可控制对应宿主程序的运行。
具体的,第一虚拟机中与第二虚拟机之间数据连接,第一虚拟机中的服务进程实时检测第二虚拟机中的宿主程序的启动情况,当第二虚拟机中的宿主程序启动时,第一虚拟机中的服务进程则会获取到一个反馈信号,根据该反馈信号,第一虚拟机中的服务进程向第二虚拟机中的宿主程序对应的宿主进程发送加载指令。
通过在检测到宿主程序启动完成时,向宿主程序对应的宿主进程发送加载指令,使得宿主进程根据加载指令加载引导代码包,为后续根据引导代码包,加载用于对宿主程序进行性能监控的监控代码包,奠定了数据基础。
S102、在所述宿主进程基于所述加载指令加载用于对所述宿主程序进行性能监控的监控代码包后,通过运行加载的所述监控代码包中的监控代码,采集所述宿主程序的性能数据。
其中,宿主程序的性能数据包括但不限于,宿主程序完全运行所需运算时间或者宿主程序完全运行所需存储空间等。
具体的,宿主进程接收到加载指令后,解析加载指令获取其包含的引导代码包的物理存储地址,并从该物理存储地址中获取并加载引导代码包,其中,引导代码包用于协助宿主进程将监控代码包加载到宿主程序中,引导代码包中包括监控代码包的物理存储地址。引导代码包加载完成后,运行所述引导代码包,根据引导代码包中监控代码包的物理存储地址,从相应地址位置中获取监控代码包,并将监控代码包加载到宿主程序中,其中监控代码包在宿主程序的加载位置可根据不同的宿主程序进行预先配置。最终运行加载于业务代码段相应位置的监控代码包中,监控代码段的监控代码,以采集业务代码段所属宿主程序的性能数据。
可选的,所述监控代码包包括监控代码段和插件代码段;其中,所述监控代码段中包含用于执行预设性能数据采集操作的监控代码,所述插件代码段中包含用于确定各所述监控代码段在所述宿主程序的业务代码段中的加载位置的代码。宿主程序的业务代码表示使宿主程序可以实现各种功能的功能代码。用于确定各监控代码段在宿主程序的业务代码段中的加载位置的代码,可以是相关技术人员预先根据不同的业务代码段进行代码编写得到的。
相应的,S102中“加载用于对所述宿主程序进行性能监控的监控代码包”包括:
通过执行所述插件代码段确定所述加载位置,根据确定结果将所述监控代码段加载到所述业务代码段中的相应位置处。
具体的,宿主进程获取到监控代码包后,对监控代码包进行解析得到监控代码段和插件代码段,通过执行插件代码段中用于确定各监控代码段在宿主程序的业务代码段中的加载位置的代码,确定各监控代码段的加载位置,并将各监控代码段加载到业务代码段中的相应加载位置处。
可选的,所述监控代码包还包括跳转代码段,其中,所述跳转代码段中包含至少一个接口以及各接口所引用的插件标识;以及,所述插件代码段还包含所述接口对应的功能实现代码。接口的类型包括但不限于map接口。插件代码段的数量至少为一个,不同的插件代码段包含不同的功能实现代码。各接口所引用的插件标识可以为一个,也可以为多个,而各插件代码段却只具有唯一的插件标识。
相应的,S102中“通过运行加载的所述监控代码包中的监控代码,采集所述宿主程序的性能数据”,包括:执行所述监控代码中的接口调用语句,根据所述跳转代码段确定所述接口调用语句所调用接口所引用的插件标识,并通过调用所述插件标识对应的插件代码段中的功能实现代码,来执行所述预设性能数据采集操作。跳转代码段中还可以包含卸载逻辑相关的代码,以通过执行该卸载逻辑相关的代码,来执行后续的卸载操作。
具体的,宿主进程执行监控代码段中监控代码中的预设的接口调用语句,并确定接口调用语句所调用的目标接口,根据该目标接口,在跳转代码段中进行匹配,确定该目标接口所引用的目标插件标识,进而根据该目标插件标识,在各插件代码段中进行匹配,确定该目标插件标识对应的目标插件代码段,最终调用该目标插件代码段中包含的该目标接口对应的功能实现代码,来执行预设性能数据采集操作,以采集宿主程序的性能数据。图1B为一种插件代码段调用示意图,其中100表示监控代码段,101表示业务代码段,102表示跳转代码段,103表示插件代码段。
通过运行加载的监控代码包中的监控代码,采集所述宿主程序的性能数据,使得对宿主程序无需任何修改也可以采集性能数据,并且加载的监控代码包不会影响宿主程序的正常执行。
本申请实施例提供的技术方案,通过向宿主程序对应的宿主进行发送加载指令,以使宿主进程根据加载指令加载引导代码包,并通过宿主进程加载并运行引导代码包后,加载监控代码包,最终运行监控代码包中的监控代码,以采集宿主程序的性能数据,使得当对宿主程序添加、卸载和升级监控代码包时,无需修改启动脚本和重启应用,避免了重启应用带来的流量损失,且解决了修改启动脚本导致的难以规模化运营监控的问题。
在上述实施例的基础上,所述监控代码包还包括代理代码段,其中,所述代理代码段中包含各插件代码段共享的公共类,以使各插件代码段中的功能实现代码通过调用所述公共类来执行预设性能数据采集操作。
其中,代理代码段中的公共类可供各插件代码段共享访问,并允许各插件代码段中的功能实现代码调用公共类中包括的各种性能数据采集方法,以执行预设性能数据采集操作。
具体的,当目标插件代码段中的功能实现代码被调用后,宿主进程控制目标插件代码段访问代理代码段中的公共类,以使目标插件代码段中的功能实现代码调用公共类中的性能数据采集方法,来执行预设性能数据采集操作。
通过插件代码段中的功能实现代码调用代理代码段中包含的公共类,使得功能实现代码可以执行预设性能数据采集操作的效果。
在上述实施例的基础上,所述方法还包括:
将所述监控代码段、插件代码段、代理代码段和跳转代码段分别加载在不同的类加载容器中,并将不同的插件代码段加载在不同的类加载容器中;其中,所述类加载容器是用于运行和解释代码中类的容器。
可选的,各类加载容器的层级结构可以为如下形式:从上至下依次为跳转代码段所在的类加载容器、监控代码段和业务代码段所在的类加载容器、代理代码段所在的类加载容器以及插件代码段所在的类加载容器,其中,跳转代码段所在的类加载容器、监控代码段和业务代码段所在的类加载容器是侵入到宿主程序的系统类加载容器当中。各类加载容器的访问权限可以为如下形式:处于下层的类加载容器中的类能够访问处于上层的类加载容器中的类,处于上层的类加载容器中的类不能够访问处于下层的类加载容器中的类。图1C为一种类加载容器的层级结构示意图,其中104表示跳转代码段所在的类加载容器,105表示监控代码段,106表示业务代码段,107表示监控代码段和业务代码段所在的类加载容器,108表示代理代码段所在的类加载容器,109表示插件代码段所在的类加载容器。
本实施例只是提供了一种可选的类加载容器的层级结构以及访问权限的实现方式,在本实施例的基础上,本领域技术人员可以根据实际情况进行类加载容器的层级结构以及访问权限的调整,以达到同样的技术效果,本实施例并不是对类加载容器的层级结构以及访问权限进行任何的限定。
通过将监控代码段、插件代码段、代理代码段和跳转代码段分别加载在不同的类加载容器中,使得业务代码和监控代码包中的各代码段互相隔离,且监控代码包中的各代码段也相互隔离,保证了监控代码包可以加载不同的类到业务代码中去而不会报错,且也不会影响业务代码的正常执行;同时,由于只有跳转代码段所在的类加载容器、监控代码段和业务代码段所在的类加载容器是侵入到宿主程序的系统类加载容器当中,而跳转代码段和监控代码段涉及的代码段较少,因此后续对监控代码包进行卸载时,可直接通过卸载插件代码段以及代理代码段的方式,实现对监控代码包中大部分的代码段的卸载,且由于各类加载容器间的隔离,卸载时也不会影响宿主程序。
在上述实施例的基础上,所述方法还包括:
在通过预先创建的类加载监听器,监听到所述监控代码中的监控类被加载到所述业务代码段中时,通过类转换器对所述监控类进行增强处理,以使所述监控类与所述业务代码段进行混合。
其中,监控类表示监控代码中所有具有性能数据采集功能的监控代码统称。类加载监听器用于对监控类加载行为的监听,类转化器用于对监控类实施增强处理操作,类加载监听器与类转化器数据连接,当类加载监听器确定监控类加载行为发生后,向类转化器发送消息,以使类转化器对监控类实施增强处理操作。增强处理的方式包括但不限于继承的方式、装饰者模式方式或是动态代理的方式。
实施例二
图2为本申请实施例二提供的一种性能数据获取方法的流程示意图。本实施例为上述实施例中“加载监控代码包”提供了一种对应的“卸载监控代码包”的具体实现方式,如图2所示,该方法可以包括:
S201、在所述宿主进程扫描到预设文件中写入了预设卸载命令时,根据跳转代码段中的卸载逻辑,执行对增强处理的移除操作。
具体的,当宿主进程扫描到预设文件中写入了预设卸载命令,则根据跳转代码段中的卸载逻辑,向监控代码段发送预设卸载命令,其中预设卸载命令包括shutdown命令,以实现对监控代码段中监控类和业务代码段之间增强处理的移除操作。
可选的,S201中“执行对增强处理的移除操作”,包括:
A、将所述类加载监听器删除。
具体的,将监控代码包植入的类加载监听器删除,进而使新加载的监控代码段中监控类不再进行增强处理操作。
B、将通过类转换器已进行了增强处理的监控类中的植入代码删除。
具体的,对于已进行了增强处理的监控类,将通过类转换器植入的增强处理代码删除,以使得监控类与业务代码段之间分离。
C、将删除植入代码后的监控类重新加载到所述监控代码段所在的类加载容器中。
具体的,将删除增强处理植入代码后的监控类重新加载到监控代码段所在的类加载容器中,以便下次需要继续加载到业务代码中时,可从类加载容器中直接调用监控类。
通过执行对增强处理的移除操作,使得监控代码段中的监控类与业务代码段之间分离。
S202、关闭所述宿主进程中用于执行监控相关操作的线程。
可选的,关闭宿主进程中用于执行监控相关操作的线程的方法,包括但不限于通过volatile类型的域来关闭、通过future中的cancel指令来关闭、调用interrupt方法来关闭或者调用stop方法来关闭。
S203、在定时回收内存时,将跳转代码段中对插件代码段的引用回收掉。
其中,定时回收内存的周期可选的包括一小时、一天或者一周中的一种。执行定时回收操作的设备包括第二虚拟机。
具体的,在第二虚拟机定时回收内存时,将跳转代码段中存在的所有引用插件代码段产生的缓存全部回收掉,以增加第二虚拟机的内存空间。
本申请实施例提供的技术方案,通过根据跳转代码段中的卸载逻辑,执行对增强处理的移除操作,关闭用于执行监控相关操作的线程,并在定时回收内存时,将跳转代码段中对插件代码段的引用回收掉,完成了对监控代码包的卸载操作,且卸载时无需修改启动脚本和重启应用,避免了重启应用带来的流量损失,且解决了修改启动脚本导致的难以规模化运营监控的问题;同时,由于对监控代码段中监控类的增强处理只是修改宿主程序的方法内容,并没有改变宿主程序运行时类结构,因此卸载监控代码包后的宿主程序可以重置到原本的状态。
实施例三
图3为本申请实施例三提供的一种性能数据获取方法的流程示意图。本实施例为上述实施例中提供了一种的“热替换监控代码包”的具体实现方式,如图3所示,该方法可以包括:
S301、在接收到热替换命令时,向所述宿主进程发送重新加载指令。
其中,“热替换监控代码包”也叫做“升级监控代码包”,本质是将新的监控代码包加载到宿主程序中。“热替换监控代码包”可以理解为“卸载已有监控代码包”与“加载新的监控代码包”的结合实现方式。接收热替换指令的主体包括第一虚拟机的服务进程。
具体的,在服务进程接收到服务器发送的热替换命令时,则向宿主进程发送重新加载指令,以控制宿主进程在对应的宿主程序中加载新的监控代码包。
通过在服务进程接收到热替换命令时,向宿主进程发送重新加载指令,为后续根据重新加载指令确定是否已加载有监控代码包,奠定了基础。
S302、当所述宿主进程接收到所述重新加载指令后,确定是否已加载有监控代码包,若是,则执行S303,否则,执行S304。
具体的,当宿主进程接收到重新加载指令后,根据跳转代码段所在的类加载容器中的信息,确定宿主进程对应的宿主程序是否已加载有监控代码包。
可选的,S302中“确定是否已加载有监控代码包”中,包括:确定跳转代码段所在的类加载容器中是否存在已加载的跳转代码段;若是,则确定已加载有监控代码包,否则,确定未加载有监控代码包。
具体的,由于跳转代码段所在的类加载容器是侵入到宿主程序的系统类加载容器当中,因此跳转代码段本身是无法进行卸载的,因此若跳转代码段所在的类加载容器中已加载有跳转代码段,则说明当前宿主程序已加载有监控代码包,若跳转代码段所在的类加载容器中未加载有跳转代码段,则说明当前宿主程序未加载有监控代码包。
S303、将已加载的监控代码包卸载,并根据所述重新加载指令加载新的监控代码包。
S304、直接根据所述重新加载指令加载新的监控代码包。
其中,S303中“将已加载的监控代码包卸载”的过程,与上述实施例二中记载的过程相同,并且,S303和S304中“根据重新加载指令加载新的监控代码包”的过程,与上述实施例一中记载的内容相同。因此对于S303和S304的具体过程,此处不再进行赘述。
本申请实施例提供的技术方案,通过向宿主进程发送重新加载指令,使得宿主进行根据重新加载指令,卸载已加载的监控代码包,加载新的监控代码包,实现了对宿主进程中的监控代码包进行热替换的效果,并且无需修改启动脚本和重启应用,避免了重启应用带来的流量损失,且解决了修改启动脚本导致的难以规模化运营监控的问题。
实施例四
图4为本申请实施例四提供的一种性能数据获取装置40的结构示意图,可执行本申请任一实施例中所提供的一种性能数据获取方法,具备执行方法相应的功能模块和有益效果。如图4所示,该装置可以包括:
引导代码包加载模块41,用于在检测到宿主程序启动完成后,向所述宿主程序对应的宿主进程发送加载指令;
性能数据采集模块42,用于在所述宿主进程基于所述加载指令加载用于对所述宿主程序进行性能监控的监控代码包后,通过运行加载的所述监控代码包中的监控代码,采集所述宿主程序的性能数据。
在上述实施例的基础上,所述监控代码包包括监控代码段和插件代码段;其中,所述监控代码段中包含用于执行预设性能数据采集操作的监控代码,所述插件代码段中包含用于确定各所述监控代码段在所述宿主程序的业务代码段中的加载位置的代码;
相应的,所述性能数据采集模块42,具体用于:
通过执行所述插件代码段确定所述加载位置,根据确定结果将所述监控代码段加载到所述业务代码段中的相应位置处。
在上述实施例的基础上,所述监控代码包还包括跳转代码段,其中,所述跳转代码段中包含至少一个接口以及各接口所引用的插件标识;以及,所述插件代码段还包含所述接口对应的功能实现代码;
相应的,所述性能数据采集模块,具体还用于:
执行所述监控代码中的接口调用语句,根据所述跳转代码段确定所述接口调用语句所调用接口所引用的插件标识,并通过调用所述插件标识对应的插件代码段中的功能实现代码,来执行所述预设性能数据采集操作。
在上述实施例的基础上,所述监控代码包还包括代理代码段,其中,所述代理代码段中包含各插件代码段共享的公共类,以使各插件代码段中的功能实现代码通过调用所述公共类来执行预设性能数据采集操作。
在上述实施例的基础上,所述装置还包括代码段加载模块,具体用于:
将所述监控代码段、插件代码段、代理代码段和跳转代码段分别加载在不同的类加载容器中,并将不同的插件代码段加载在不同的类加载容器中;其中,所述类加载容器是用于运行和解释代码中类的容器。
在上述实施例的基础上,所述装置还包括增强处理模块,具体用于:
在通过预先创建的类加载监听器,监听到所述监控代码中的监控类被加载到所述业务代码段中时,通过类转换器对所述监控类进行增强处理,以使所述监控类与所述业务代码段进行混合。
在上述实施例的基础上,所述装置还包括卸载模块,具体用于:
在所述宿主进程扫描到预设文件中写入了预设卸载命令时,根据跳转代码段中的卸载逻辑,执行对所述增强处理的移除操作,关闭所述宿主进程中用于执行监控相关操作的线程,并在定时回收内存时,将跳转代码段中对插件代码段的引用回收掉。
在上述实施例的基础上,所述卸载模块,具体还用于:
将所述类加载监听器删除;
将通过类转换器已进行了增强处理的监控类中的植入代码删除;
将删除植入代码后的监控类重新加载到所述监控代码段所在的类加载容器中。
在上述实施例的基础上,所述装置还包括热替换模块,具体用于:
在接收到热替换命令时,向所述宿主进程发送重新加载指令;
当所述宿主进程接收到所述重新加载指令后,确定是否已加载有监控代码包,若是,则将已加载的监控代码包卸载,并根据所述重新加载指令加载新的监控代码包;
否则,直接根据所述重新加载指令加载新的监控代码包。
在上述实施例的基础上,所述热替换模块,具体还用于:
确定跳转代码段所在的类加载容器中是否存在已加载的跳转代码段;
若是,则确定已加载有监控代码包,否则,确定未加载有监控代码包。
本申请实施例所提供的一种性能数据获取装置40,可执行本申请任一实施例所提供的一种性能数据获取方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本申请任一实施例所提供的一种性能数据获取方法。
根据本申请的实施例,本申请还提供了一种电子设备和一种可读存储介质。
如图5所示,是根据本申请实施例的性能数据获取方法的电子设备的框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本申请的实现。
如图5所示,该电子设备包括:一个或多个处理器501、存储器502,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在电子设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示GUI的图形信息的指令。在其它实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个电子设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。图5中以一个处理器501为例。
存储器502即为本申请所提供的非瞬时计算机可读存储介质。其中,所述存储器存储有可由至少一个处理器执行的指令,以使所述至少一个处理器执行本申请所提供的性能数据获取方法。本申请的非瞬时计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行本申请所提供的性能数据获取方法。
存储器502作为一种非瞬时计算机可读存储介质,可用于存储非瞬时软件程序、非瞬时计算机可执行程序以及模块,如本申请实施例中的性能数据获取方法对应的程序指令/模块(例如,附图4所示的引导代码包加载模块41和性能数据采集模块42)。处理器501通过运行存储在存储器502中的非瞬时软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例中的性能数据获取方法。
存储器502可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据性能数据获取的电子设备的使用所创建的数据等。此外,存储器502可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些实施例中,存储器502可选包括相对于处理器501远程设置的存储器,这些远程存储器可以通过网络连接至性能数据获取的电子设备。上述网络的实例包括但不限于互联网、企业内部网、区块链网络、局域网、移动通信网及其组合。
性能数据获取的方法的电子设备还可以包括:输入装置503和输出装置504。处理器501、存储器502、输入装置503和输出装置504可以通过总线或者其他方式连接,图5中以通过总线连接为例。
输入装置503可接收输入的数字或字符信息,以及产生与性能数据获取的电子设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等输入装置。输出装置504可以包括显示设备、辅助照明装置(例如,LED)和触觉反馈装置(例如,振动电机)等。该显示设备可以包括但不限于,液晶显示器(LCD)、发光二极管(LED)显示器和等离子体显示器。在一些实施方式中,显示设备可以是触摸屏。
此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、专用ASIC(专用集成电路)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
这些计算程序(也称作程序、软件、软件应用、或者代码)包括可编程处理器的机器指令,并且可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。如本文使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置(例如,磁盘、光盘、存储器、可编程逻辑装置(PLD)),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)、区块链网络和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
根据本申请实施例的技术方案,当对宿主程序添加、卸载和升级监控代码包时,无需修改启动脚本和重启应用,避免了重启应用带来的流量损失,且解决了修改启动脚本导致的难以规模化运营监控的问题。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。
Claims (15)
1.一种性能数据获取方法,其特征在于,所述方法包括:
在检测到宿主程序启动完成后,向所述宿主程序对应的宿主进程发送加载指令;
在所述宿主进程基于所述加载指令加载用于对所述宿主程序进行性能监控的监控代码包后,通过运行加载的所述监控代码包中的监控代码,采集所述宿主程序的性能数据。
2.根据权利要求1所述的方法,其特征在于,所述监控代码包包括监控代码段和插件代码段;其中,所述监控代码段中包含用于执行预设性能数据采集操作的监控代码,所述插件代码段中包含用于确定各所述监控代码段在所述宿主程序的业务代码段中的加载位置的代码;
相应的,加载用于对所述宿主程序进行性能监控的监控代码包,包括:
通过执行所述插件代码段确定所述加载位置,根据确定结果将所述监控代码段加载到所述业务代码段中的相应位置处。
3.根据权利要求2所述的方法,其特征在于,所述监控代码包还包括跳转代码段,其中,所述跳转代码段中包含至少一个接口以及各接口所引用的插件标识;以及,所述插件代码段还包含所述接口对应的功能实现代码;
相应的,通过运行加载的所述监控代码包中的监控代码,采集所述宿主程序的性能数据,包括:
执行所述监控代码中的接口调用语句,根据所述跳转代码段确定所述接口调用语句所调用接口所引用的插件标识,并通过调用所述插件标识对应的插件代码段中的功能实现代码,来执行所述预设性能数据采集操作。
4.根据权利要求3所述的方法,其特征在于,所述监控代码包还包括代理代码段,其中,所述代理代码段中包含各插件代码段共享的公共类,以使各插件代码段中的功能实现代码通过调用所述公共类来执行预设性能数据采集操作。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
将所述监控代码段、插件代码段、代理代码段和跳转代码段分别加载在不同的类加载容器中,并将不同的插件代码段加载在不同的类加载容器中;其中,所述类加载容器是用于运行和解释代码中类的容器。
6.根据权利要求2-5中任一所述的方法,其特征在于,所述方法还包括:
在通过预先创建的类加载监听器,监听到所述监控代码中的监控类被加载到所述业务代码段中时,通过类转换器对所述监控类进行增强处理,以使所述监控类与所述业务代码段进行混合。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在所述宿主进程扫描到预设文件中写入了预设卸载命令时,根据跳转代码段中的卸载逻辑,执行对所述增强处理的移除操作,关闭所述宿主进程中用于执行监控相关操作的线程,并在定时回收内存时,将跳转代码段中对插件代码段的引用回收掉。
8.根据权利要求7所述的方法,其特征在于,执行对所述增强处理的移除操作,包括:
将所述类加载监听器删除;
将通过类转换器已进行了增强处理的监控类中的植入代码删除;
将删除植入代码后的监控类重新加载到所述监控代码段所在的类加载容器中。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在接收到热替换命令时,向所述宿主进程发送重新加载指令;
当所述宿主进程接收到所述重新加载指令后,确定是否已加载有监控代码包,若是,则将已加载的监控代码包卸载,并根据所述重新加载指令加载新的监控代码包;
否则,直接根据所述重新加载指令加载新的监控代码包。
10.根据权利要求9所述的方法,其特征在于,确定是否已加载有监控代码包,包括:
确定跳转代码段所在的类加载容器中是否存在已加载的跳转代码段;
若是,则确定已加载有监控代码包,否则,确定未加载有监控代码包。
11.一种性能数据获取装置,其特征在于,所述装置包括:
引导代码包加载模块,用于在检测到宿主程序启动完成后,向所述宿主程序对应的宿主进程发送加载指令;
性能数据采集模块,用于在所述宿主进程基于所述加载指令加载用于对所述宿主程序进行性能监控的监控代码包后,通过运行加载的所述监控代码包中的监控代码,采集所述宿主程序的性能数据。
12.根据权利要求11所述的装置,其特征在于,所述监控代码包包括监控代码段和插件代码段;其中,所述监控代码段中包含用于执行预设性能数据采集操作的监控代码,所述插件代码段中包含用于确定各所述监控代码段在所述宿主程序的业务代码段中的加载位置的代码;
相应的,所述性能数据采集模块,具体用于:
通过执行所述插件代码段确定所述加载位置,根据确定结果将所述监控代码段加载到所述业务代码段中的相应位置处。
13.根据权利要求12所述的装置,其特征在于,所述监控代码包还包括跳转代码段,其中,所述跳转代码段中包含至少一个接口以及各接口所引用的插件标识;以及,所述插件代码段还包含所述接口对应的功能实现代码;
相应的,所述性能数据采集模块,具体还用于:
执行所述监控代码中的接口调用语句,根据所述跳转代码段确定所述接口调用语句所调用接口所引用的插件标识,并通过调用所述插件标识对应的插件代码段中的功能实现代码,来执行所述预设性能数据采集操作。
14.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-10中任一项所述的性能数据获取方法。
15.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使所述计算机执行权利要求1-10中任一项所述的性能数据获取方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911367621.2A CN113051122B (zh) | 2019-12-26 | 2019-12-26 | 性能数据获取方法、装置、电子设备和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911367621.2A CN113051122B (zh) | 2019-12-26 | 2019-12-26 | 性能数据获取方法、装置、电子设备和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113051122A true CN113051122A (zh) | 2021-06-29 |
CN113051122B CN113051122B (zh) | 2023-09-15 |
Family
ID=76505484
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911367621.2A Active CN113051122B (zh) | 2019-12-26 | 2019-12-26 | 性能数据获取方法、装置、电子设备和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113051122B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114185734A (zh) * | 2021-11-26 | 2022-03-15 | 北京百度网讯科技有限公司 | 一种监控集群的方法、装置及电子设备 |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090254525A1 (en) * | 2008-04-07 | 2009-10-08 | Krishnan Srinivasan | Method and system for a database to monitor and analyze performance of an electronic design |
US20110107307A1 (en) * | 2009-10-30 | 2011-05-05 | International Business Machines Corporation | Collecting Program Runtime Information |
CN102831043A (zh) * | 2011-06-17 | 2012-12-19 | 阿里巴巴集团控股有限公司 | 应用程序监控方法和装置 |
US20130262702A1 (en) * | 2012-03-29 | 2013-10-03 | A10 Networks, Inc. | Hardware-based packet editor |
CN104932865A (zh) * | 2015-07-10 | 2015-09-23 | 武汉工程大学 | 一种组件协议挖掘方法、装置及系统 |
CN105574411A (zh) * | 2015-12-25 | 2016-05-11 | 北京奇虎科技有限公司 | 一种动态脱壳方法、装置和设备 |
CN105938436A (zh) * | 2016-07-14 | 2016-09-14 | 深圳市金立通信设备有限公司 | 一种操作系统的启动控制方法及终端 |
CN106203120A (zh) * | 2016-07-15 | 2016-12-07 | 北京邮电大学 | 一种针对Android加固应用的多点Hook逆向方法 |
CN106897609A (zh) * | 2015-12-17 | 2017-06-27 | 北京奇虎科技有限公司 | 一种对动态加载的应用程序进行监控的方法及装置 |
CN107665302A (zh) * | 2017-09-26 | 2018-02-06 | 惠州Tcl移动通信有限公司 | 一种Android应用多开实现方法、移动终端及存储介质 |
CN109344616A (zh) * | 2018-09-13 | 2019-02-15 | 西安交通大学 | 一种移动应用程序动态加载行为监控方法及装置 |
CN110007980A (zh) * | 2019-01-29 | 2019-07-12 | 阿里巴巴集团控股有限公司 | 多业务服务端的实现方法和装置 |
CN110083436A (zh) * | 2019-05-14 | 2019-08-02 | 上海理想信息产业(集团)有限公司 | 一种基于Java字节码增强技术的业务数据实时监控系统及方法 |
CN110597515A (zh) * | 2019-08-27 | 2019-12-20 | 绿漫科技有限公司 | 一种字节码插桩方法 |
-
2019
- 2019-12-26 CN CN201911367621.2A patent/CN113051122B/zh active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090254525A1 (en) * | 2008-04-07 | 2009-10-08 | Krishnan Srinivasan | Method and system for a database to monitor and analyze performance of an electronic design |
US20110107307A1 (en) * | 2009-10-30 | 2011-05-05 | International Business Machines Corporation | Collecting Program Runtime Information |
CN102831043A (zh) * | 2011-06-17 | 2012-12-19 | 阿里巴巴集团控股有限公司 | 应用程序监控方法和装置 |
US20130262702A1 (en) * | 2012-03-29 | 2013-10-03 | A10 Networks, Inc. | Hardware-based packet editor |
CN104932865A (zh) * | 2015-07-10 | 2015-09-23 | 武汉工程大学 | 一种组件协议挖掘方法、装置及系统 |
CN106897609A (zh) * | 2015-12-17 | 2017-06-27 | 北京奇虎科技有限公司 | 一种对动态加载的应用程序进行监控的方法及装置 |
CN105574411A (zh) * | 2015-12-25 | 2016-05-11 | 北京奇虎科技有限公司 | 一种动态脱壳方法、装置和设备 |
CN105938436A (zh) * | 2016-07-14 | 2016-09-14 | 深圳市金立通信设备有限公司 | 一种操作系统的启动控制方法及终端 |
CN106203120A (zh) * | 2016-07-15 | 2016-12-07 | 北京邮电大学 | 一种针对Android加固应用的多点Hook逆向方法 |
CN107665302A (zh) * | 2017-09-26 | 2018-02-06 | 惠州Tcl移动通信有限公司 | 一种Android应用多开实现方法、移动终端及存储介质 |
CN109344616A (zh) * | 2018-09-13 | 2019-02-15 | 西安交通大学 | 一种移动应用程序动态加载行为监控方法及装置 |
CN110007980A (zh) * | 2019-01-29 | 2019-07-12 | 阿里巴巴集团控股有限公司 | 多业务服务端的实现方法和装置 |
CN110083436A (zh) * | 2019-05-14 | 2019-08-02 | 上海理想信息产业(集团)有限公司 | 一种基于Java字节码增强技术的业务数据实时监控系统及方法 |
CN110597515A (zh) * | 2019-08-27 | 2019-12-20 | 绿漫科技有限公司 | 一种字节码插桩方法 |
Non-Patent Citations (1)
Title |
---|
陈荔城;崔泽汉;包云岗;陈明宇;沈林峰;梁祺;: "一种监测函数语义信息访存地址序列的方法", 计算机研究与发展, no. 05, pages 1100 - 1110 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114185734A (zh) * | 2021-11-26 | 2022-03-15 | 北京百度网讯科技有限公司 | 一种监控集群的方法、装置及电子设备 |
CN114185734B (zh) * | 2021-11-26 | 2023-11-14 | 北京百度网讯科技有限公司 | 一种监控集群的方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN113051122B (zh) | 2023-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110780890B (zh) | 系统升级方法、装置、电子设备和介质 | |
CN111984476B (zh) | 测试方法和装置 | |
EP3869336A1 (en) | Method and apparatus for processing development machine operation task, device and storage medium | |
CN109308241B (zh) | 监听应用程序启动流程方法、装置、终端设备和存储介质 | |
WO2020123213A1 (en) | Container migration in computing systems | |
CN111290768B (zh) | 一种容器化应用系统的更新方法、装置、设备和介质 | |
CN112925651A (zh) | 应用资源部署方法、装置、电子设备和介质 | |
CN112328296B (zh) | 针对跨平台应用的软件更新方法、装置、设备和介质 | |
CN110995480A (zh) | 区块链网络部署方法、装置、电子设备和介质 | |
CN112925652A (zh) | 应用资源部署方法、装置、电子设备和介质 | |
CN111597027A (zh) | 应用程序的启动方法、装置、设备及存储介质 | |
CN114721686A (zh) | 配置数据更新方法、装置、电子设备和存储介质 | |
CN113051122B (zh) | 性能数据获取方法、装置、电子设备和介质 | |
CN112948102B (zh) | 虚拟机事件处理方法、装置和系统 | |
CN113626095A (zh) | 配置中心的切换方法、切换系统、电子设备及存储介质 | |
CA2997302C (en) | Application migration | |
JP7147123B2 (ja) | ソースチャネル決定方法、装置、機器、プログラム及びコンピューター記憶媒体 | |
CN115277398A (zh) | 一种集群的网络配置方法和装置 | |
CN115576565A (zh) | 应用程序的部署方法、装置、电子设备及存储介质 | |
CN112379973A (zh) | 重载方法和装置 | |
CN111966421A (zh) | 页面组件的运行监测方法、装置、设备和存储介质 | |
CN111694608A (zh) | 终端设备的系统升级方法和装置、电子设备和终端设备 | |
CN112527368B (zh) | 集群内核版本更新方法、装置、电子设备和存储介质 | |
CN111190693B (zh) | 一种基于鲲鹏平台搭建云平台的方法及装置 | |
CN111258954B (zh) | 数据迁移方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |