CN117873833A - 一种jvm探针的配置方法及装置、电子设备、存储介质 - Google Patents
一种jvm探针的配置方法及装置、电子设备、存储介质 Download PDFInfo
- Publication number
- CN117873833A CN117873833A CN202410055065.XA CN202410055065A CN117873833A CN 117873833 A CN117873833 A CN 117873833A CN 202410055065 A CN202410055065 A CN 202410055065A CN 117873833 A CN117873833 A CN 117873833A
- Authority
- CN
- China
- Prior art keywords
- jvm
- dynamic link
- link library
- probe
- java
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 83
- 239000000523 sample Substances 0.000 title claims abstract description 68
- 230000007246 mechanism Effects 0.000 claims abstract description 39
- 238000004590 computer program Methods 0.000 claims description 4
- 230000008569 process Effects 0.000 description 26
- 238000012544 monitoring process Methods 0.000 description 14
- 239000003795 chemical substances by application Substances 0.000 description 13
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 4
- 239000000243 solution Substances 0.000 description 4
- 238000004806 packaging method and process Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000006798 recombination Effects 0.000 description 1
- 238000005215 recombination Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明提供一种JVM探针的配置方法及装置、电子设备、存储介质,当接收到的java指令时,执行java指令对应的java程序;根据java程序的JVM配置文件,查找JVM动态链接库文件;基于JVM动态链接库文件初始化JVM实例,获取JNIEnv接口;通过JNIEnv接口,利用自定义动态链接库文件在java程序的运行参数中配置探针参数;自定义动态链接库文件预先根据Linux预加载机制装载到java程序中;基于配置后的java程序的运行参数和JVM实例,创建并启动JVM实例。基于Linux系统的动态链接库预加载机制,通过自定义的动态链接库动态注入探针参数,实现探针对业务系统的完全无侵入式注入。
Description
技术领域
本发明涉及运维监控技术领域,尤其涉及一种JVM探针的配置方法及装置、电子设备、存储介质。
背景技术
随着Java技术发展,应用程序越来越复杂化,为更好的优化应用程序,在开发、部署及运行的过程中,需要及时对业务进程的运行数据(如各种性能指标和运行状态信息)进行监测和对可观性数据进行采集,可以通过配置探针的方式对运行数据进行监测。
现有的探针配置方式为开发者对业务服务进行编译打包时,手工在每一个服务镜像的启动脚本中固定增加-javaagent配置,或者由部署人员通过流水线方式在每一次程序编译打包时统一配置增加-javaagent的配置。但是这种配置方式需要侵入到业务打包及部署的环节,存在采集代理Agent与业务服务包严重耦合的问题。
发明内容
有鉴于此,本发明实施例提供一种JVM探针的配置方法及装置、电子设备、存储介质,以解决目前探针配置存在采集代理Agent与业务服务包严重耦合的问题。
为实现上述目的,本发明实施例提供如下技术方案:
本发明第一方面公开一种JVM探针的配置方法,所述方法包括:
当接收到的java指令时,执行所述java指令对应的java程序;
根据所述java程序的JVM配置文件,查找JVM动态链接库文件;
基于所述JVM动态链接库文件初始化JVM实例,获取JNIEnv接口;
通过所述JNIEnv接口,利用自定义动态链接库文件在所述java程序的运行参数中配置探针参数;所述自定义动态链接库文件预先根据Linux预加载机制装载到所述java程序中;
基于配置后的所述java程序的运行参数和所述JVM实例,创建并启动JVM实例。
优选的,预先根据Linux预加载机制装载自定义动态链接库文件到所述java程序中的过程,包括:
接收用户输入的自定义动态链接库文件;
根据Linux的LD_PRELOAD预加载机制,将所述自定义动态链接库文件装载到所述java程序中。
优选的,所述通过所述JNIEnv接口,利用自定义动态链接库文件在所述java程序的运行参数中配置探针参数,包括:
通过所述JNIEnv接口,利用自定义动态链接库文件对所述java程序的运行参数进行编排;
在编排后的所述java程序的运行参数的列表末尾配置探针参数。
优选的所述基于配置后的所述java程序的运行参数和所述JVM实例,创建并启动JVM实例,包括:
基于配置后的所述java程序的运行参数,执行对应的创建方法创建JVM实例;
在所述JVM实例中运行所述探针参数对应的探针程序;
启动所述JVM实例。
本发明第二方面公开一种JVM探针的配置装置,所述装置包括:
执行单元,用于当接收到的java指令时,执行所述java指令对应的java程序;
查找单元,用于根据所述java程序的JVM配置文件,查找JVM动态链接库文件;
获取单元,用于基于所述JVM动态链接库文件初始化JVM实例,获取JNIEnv接口;
配置单元,用于通过所述JNIEnv接口,利用自定义动态链接库文件在所述java程序的运行参数中配置探针参数;所述自定义动态链接库文件预先根据Linux预加载机制装载到所述java程序中;
创建单元,用于基于配置后的所述java程序的运行参数和所述JVM实例,创建并启动JVM实例。
优选的,所述装置还包括:
接收单元,用于接收用户输入的自定义动态链接库文件;
装载单元,用于根据Linux的LD_PRELOAD预加载机制,将所述自定义动态链接库文件装载到所述java程序中。
优选的,所述配置单元,包括:
编排模块,用于通过所述JNIEnv接口,利用自定义动态链接库文件对所述java程序的运行参数进行编排;
配置模块,用于在编排后的所述java程序的运行参数的列表末尾配置探针参数。
优选的,所述创建单元,包括:
创建模块,用于基于配置后的所述java程序的运行参数,执行对应的创建方法创建JVM实例;
运行模块,用于在所述JVM实例中运行所述探针参数对应的探针程序;
启动模块,用于启动所述JVM实例。
本发明第三方面公开一种电子设备,包括:
存储器和处理器;
其中,所述存储器用于存储程序;
所述处理器用于执行所述程序,所述程序被执行时,具体用于实现本发明第一方面公开的一种JVM探针的配置方法。
本发明第四方面公开一种计算机存储介质,用于存储计算机程序,所述计算机程序被执行时,用于实现如本发明第一方面公开的一种JVM探针的配置方法。
基于上述本发明实施例提供的一种JVM探针的配置方法及装置、电子设备、存储介质,该方法包括:当接收到的java指令时,执行java指令对应的java程序;根据java程序的JVM配置文件,查找JVM动态链接库文件;基于JVM动态链接库文件初始化JVM实例,获取JNIEnv接口;通过JNIEnv接口,利用自定义动态链接库文件在java程序的运行参数中配置探针参数;自定义动态链接库文件预先根据Linux预加载机制装载到java程序中;基于配置后的java程序的运行参数和JVM实例,创建并启动JVM实例。基于Linux系统的动态链接库预加载机制,通过自定义的动态链接库动态注入探针参数,实现探针对业务系统的完全无侵入式注入,同时实现了业务程序开发及部署全流程与监控采集模块的解耦,二者之间形成一个动态插拨的关系。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种JVM探针的配置方法的流程图;
图2为本发明实施例提供的Linux平台的动态库预加载机制的原理示意图;
图3为本发明实施例提供的预先装载JVM动态链接库文件到java程序的流程图;
图4为本发明实施例提供的基于预加载机制的JVN启动示意图;
图5为本发明实施例提供的一种JVM探针的配置装置的结构框图;
图6为本申请另一实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
由背景技术可知,现有的探针配置方式需要侵入到业务打包及部署的环节,存在采集代理Agent与业务服务包严重耦合的问题。
因此,本发明实施例提供一种JVM探针的配置方法及装置、电子设备、存储介质,该方法包括:当接收到的java指令时,执行java指令对应的java程序;根据java程序的JVM配置文件,查找JVM动态链接库文件;基于JVM动态链接库文件初始化JVM实例,获取JNIEnv接口;通过JNIEnv接口,利用自定义动态链接库文件在java程序的运行参数中配置探针参数;自定义动态链接库文件预先根据Linux预加载机制装载到java程序中;基于配置后的java程序的运行参数和JVM实例,创建并启动JVM实例。基于Linux系统的动态链接库预加载机制,通过自定义的动态链接库动态注入探针参数,实现探针对业务系统的完全无侵入式注入,同时实现了业务程序开发及部署全流程与监控采集模块的解耦,二者之间形成一个动态插拨的关系。
参见图1,示出了本发明实施例提供的一种JVM探针的配置方法的流程图,该方法包括:
需要说明的是,本发明实施例基于Java的Instrumentation特性,用户(如开发者)预先构建一个独立于应用程序的代理程序(Agent),并在JVM启动时通过增加探针参数(如-javaagent参数)启动这个代理,实现对业务进程的运行监测及可观测性数据采集。
步骤S101:当接收到的java指令时,执行java指令对应的java程序。
在具体实现步骤S101的过程中,接收java指令,基于java指令在脚本中执行java指令对应的java程序。
步骤S102:根据java程序的JVM配置文件,查找JVM动态链接库文件。
在具体实现步骤S102的过程中,根据java程序的当前路径和系统版本查找JVM配置文件(如jvm.cfg文件),基于JVM配置文件(如jvm.cfg文件)查找JVM动态链接库文件(如JVM.dll文件)。
步骤S103:基于JVM动态链接库文件初始化JVM实例,获取JNIEnv接口。
在具体实现步骤S103的过程中,根据JVM动态链接库文件(如JVM.dll文件)初始化JVM实例,从而获取JNIEnv接口。
可以理解的是,JVM执行启动过程中通常将环境配置信息及参数信息封闭在JNIEnv接口中。
需要说明的是,JNIEnv接口是Java Native Interface(JNI)中的一个关键接口,JNIEnv接口定义了一系列的函数,这些函数允许本地代码与Java虚拟机进行交互,包括创建Java对象、调用Java方法、访问Java类的字段等操作。通过JNIEnv接口,本地代码可以获取到虚拟机环境的引用,从而操作Java对象、数组、字符串等,并且可以抛出Java异常,处理Java异常等。是本地方法与Java虚拟机进行通信的桥梁。
步骤S104:通过JNIEnv接口,利用自定义动态链接库文件在java程序的运行参数中配置探针参数。
在具体实现步骤S104的过程中,通过JNIEnv接口,利用自定义动态链接库文件(如jvmagent.so文件)对java程序的运行参数进行编排;在编排后的java程序的运行参数的列表末尾配置探针参数。
需要说明的是,Java程序启动时,运行参数列表为“java[options]-jar filename[args]”,而自定义动态链接库文件(如jvmagent.so文件)中创建JVM的方法入参为“JNI_CreateJavaVM(JavaVM**pvm,void**penv,void*args)”,其中“**penv”对应到启动配置参数[options]列表。
可以理解的是,实现探针(如Agent程序)的注入,就是在[options]列表中增加“-javaagent配置项”,因此,对CreateJavaVM方法入参的重新编排,事实上就是在[options]配置参数列表末尾增加“-javaagent配置项”。
需要说明的是,自定义动态链接库文件(如jvmagent.so文件)预先根据Linux预加载机制装载到java程序中。
可以理解的是,结合本发明实施例图2示出的内容可知:通过Linux平台的LD_PRELOAD指定的共享库或者目标文件的装载顺序十分靠前,几乎是程序运行最先装载的,因此基于此机制,在主程序和其动态链接库的中间加载自定义的动态链接库,并且在自定义动态链接库中实现对正常的函数的拦截覆盖,从而影响正常程序的启动行为。
参见本发明实施例图3示出的内容,具体预先根据Linux预加载机制装载自定义动态链接库文件到java程序中的过程如下:
步骤S301:接收用户输入的自定义动态链接库文件。
在具体实现步骤S301的过程中,执行java指令对应的java程序之后,接收用户(如开发者)输入的自定义动态链接库文件(如jvmagent.so文件)。
步骤S302:根据Linux的LD_PRELOAD预加载机制,将自定义动态链接库文件装载到java程序中。
在具体实现步骤S302的过程中,根据Linux的LD_PRELOAD预加载机制,将自定义动态链接库文件装载到java程序中,以实现拦截CreateJavaVM方法。
在图3示出的内容中,通过Linux的LD_PRELOAD预加载机制,在主程序和其动态链接库的中间加载自定义的动态链接库,基于CreateJavaVM方法,实现对java程序中原来的创建JVM的方式进行覆盖,便于动态输入探针参数。
可以理解的是,在JVM的启动过程中,本质上是通过调用动态链接库libjvm.so中的CreateJavaVM函数实现的。同时,Linux系统的LD_PRELOAD预加载机制可以影响程序的运行时的链接,其允许用户定义在程序运行前优先加载的动态链接库,便于有选择性的载入不同动态链接库中的相同函数。因此,将自定义的jvmagent.so动态链接库文件配置为系统预加载,同时这个库中自定义了CreateJavaVM的实现,系统会优先加载执行这个函数,而不再执行libjvm.so中的函数,从而实现了对原来的创建JVM的方式的覆盖。
步骤S105:基于配置后的java程序的运行参数和JVM实例,创建并启动JVM实例。
在具体实现步骤S105的过程中,基于配置后的java程序的运行参数(即注入了-javaagent参数的args参数),执行对应的创建方法创建JVM实例;在JVM实例中运行探针参数对应的探针程序;启动JVM实例。
在本发明实施例中,基于Linux系统的动态链接库预加载机制,通过自定义的动态链接库动态注入探针参数,实现探针对业务系统的完全无侵入式注入,同时实现了业务程序开发及部署全流程与监控采集模块的解耦,二者之间形成一个动态插拨的关系。
为了更好地对上述本发明实施例图1中的内容进行解释说明,参见图4,示出了本发明实施例提供的基于预加载机制的JVN启动示意图,包括:Java<main>401模块、装载自定义动态链接库402模块、装载配置403模块、根据配置寻找JVM.dll404模块、初始化JVM获得JNIEnv接口405模块、args参数中注入-javaagent406模块和创建JVM407模块。下面对各个模块的内容进行解释说明:
Java<main>401模块,指征在java程序启动之后,优先装载用户(如开发者)自定义的动态链接库(如装载自定义动态链接库402模块所示)。
装载自定义动态链接库402模块,指征将用户自定义的动态链接库jvmagent.so优先装载到java程序中。
可以理解的是,用户自定义的动态链接库jvmagent.so可以用于拦截CreateJavaVM方法。
也就是说,用户自定义的动态链接库jvmagent.so覆盖创建JVM的实现方法,并对方法入参进行重新编排,动态注入-javaagent参数,用于启动java采集代理。
装载配置403模块,指征JVM启动时,根据JAVA_HOME等环境配置信息寻找JVM库。
根据配置寻找JVM.dll404模块,指征4.根据JAVA_HOME等环境配置信息寻找JVM库。
可以理解的是,JVM.dll是Java虚拟机在Windows系统上的动态链接库文件,它是Java运行时环境的核心组件,负责解释和执行Java字节码,使得Java程序能够在Windows平台上运行。
初始化JVM获得JNIEnv接口405模块,指征获取JNIEnv接口,利用JNIEnv接口构建args参数。
可以理解的是,JVM执行启动过程中将环境配置信息及参数信息封闭在JNIEnv接口中。
args参数中注入-javaagent406模块,指征jvmagent.so动态链接库实现了CreateJavaVM方法,并被系统优先加载,在此方法内部通过对参数列表的重新组合,将-javaagent参数添加到参数列表中。
创建JVM407模块,指征基于修改后的参数列表,执行正常的JVM创建过程,完成JVM实例的启动。
在本发明实施例中,基于Linux系统的动态链接库预加载机制,通过自定义的动态链接库动态注入探针参数,实现探针对业务系统的完全无侵入式注入,同时实现了业务程序开发及部署全流程与监控采集模块的解耦,二者之间形成一个动态插拨的关系。
与上述本发明实施例提供的一种JVM探针的配置方法相对应,参见图5,示出了本发明实施例提供的一种JVM探针的配置装置的结构框图,该装置包括:执行单元501、查找单元502、获取单元503、配置单元504和创建单元505。
执行单元501,用于当接收到的java指令时,执行java指令对应的java程序。
查找单元502,用于根据java程序的JVM配置文件,查找JVM动态链接库文件。
获取单元503,用于基于JVM动态链接库文件初始化JVM实例,获取JNIEnv接口。
配置单元504,用于通过JNIEnv接口,利用自定义动态链接库文件在java程序的运行参数中配置探针参数;自定义动态链接库文件预先根据Linux预加载机制装载到java程序中。
创建单元505,用于基于配置后的java程序的运行参数和JVM实例,创建并启动JVM实例。
在本发明实施例中,基于Linux系统的动态链接库预加载机制,通过自定义的动态链接库动态注入探针参数,实现探针对业务系统的完全无侵入式注入,同时实现了业务程序开发及部署全流程与监控采集模块的解耦,二者之间形成一个动态插拨的关系。
结合图5示出的内容,该装置还包括:接收单元和装载单元。
接收单元,用于接收用户输入的自定义动态链接库文件。
装载单元,用于根据Linux的LD_PRELOAD预加载机制,将自定义动态链接库文件装载到java程序中。
结合图5示出的内容,配置单元504包括编排模块和配置模块。
编排模块,用于通过JNIEnv接口,利用自定义动态链接库文件对java程序的运行参数进行编排。
配置模块,用于在编排后的java程序的运行参数的列表末尾配置探针参数。
结合图5示出的内容,创建单元505包括创建模块、运行模块和启动模块。
创建模块,用于基于配置后的java程序的运行参数,执行对应的创建方法创建JVM实例。
运行模块,用于在JVM实例中运行探针参数对应的探针程序。
启动模块,用于启动JVM实例。
本申请另一实施例提供了一种电子设备,如图6所示,包括:
存储器601和处理器602。
其中,存储器601用于存储程序。
处理器602用于执行程序,程序被执行时,具体用于实现如上述任意一个实施例提供的一种JVM探针的配置方法。
本申请另一实施例提供了一种计算机存储介质,用于存储计算机程序,计算机程序被执行时,用于实现如上述任意一个实施例提供的一种JVM探针的配置方法。
计算机存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
综上所述,本发明实施例提供了一种JVM探针的配置方法及装置、电子设备、存储介质,该方法包括:当接收到的java指令时,执行java指令对应的java程序;根据java程序的JVM配置文件,查找JVM动态链接库文件;基于JVM动态链接库文件初始化JVM实例,获取JNIEnv接口;通过JNIEnv接口,利用自定义动态链接库文件在java程序的运行参数中配置探针参数;自定义动态链接库文件预先根据Linux预加载机制装载到java程序中;基于配置后的java程序的运行参数和JVM实例,创建并启动JVM实例。基于Linux系统的动态链接库预加载机制,通过自定义的动态链接库动态注入探针参数,实现探针对业务系统的完全无侵入式注入,同时实现了业务程序开发及部署全流程与监控采集模块的解耦,二者之间形成一个动态插拨的关系。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种JVM探针的配置方法,其特征在于,所述方法包括:
当接收到的java指令时,执行所述java指令对应的java程序;
根据所述java程序的JVM配置文件,查找JVM动态链接库文件;
基于所述JVM动态链接库文件初始化JVM实例,获取JNIEnv接口;
通过所述JNIEnv接口,利用自定义动态链接库文件在所述java程序的运行参数中配置探针参数;所述自定义动态链接库文件预先根据Linux预加载机制装载到所述java程序中;
基于配置后的所述java程序的运行参数和所述JVM实例,创建并启动JVM实例。
2.根据权利要求1所述的方法,其特征在于,预先根据Linux预加载机制装载自定义动态链接库文件到所述java程序中的过程,包括:
接收用户输入的自定义动态链接库文件;
根据Linux的LD_PRELOAD预加载机制,将所述自定义动态链接库文件装载到所述java程序中。
3.根据权利要求1所述的方法,其特征在于,所述通过所述JNIEnv接口,利用自定义动态链接库文件在所述java程序的运行参数中配置探针参数,包括:
通过所述JNIEnv接口,利用自定义动态链接库文件对所述java程序的运行参数进行编排;
在编排后的所述java程序的运行参数的列表末尾配置探针参数。
4.根据权利要求1所述的方法,其特征在于,所述基于配置后的所述java程序的运行参数和所述JVM实例,创建并启动JVM实例,包括:
基于配置后的所述java程序的运行参数,执行对应的创建方法创建JVM实例;
在所述JVM实例中运行所述探针参数对应的探针程序;
启动所述JVM实例。
5.一种JVM探针的配置装置,其特征在于,所述装置包括:
执行单元,用于当接收到的java指令时,执行所述java指令对应的java程序;
查找单元,用于根据所述java程序的JVM配置文件,查找JVM动态链接库文件;
获取单元,用于基于所述JVM动态链接库文件初始化JVM实例,获取JNIEnv接口;
配置单元,用于通过所述JNIEnv接口,利用自定义动态链接库文件在所述java程序的运行参数中配置探针参数;所述自定义动态链接库文件预先根据Linux预加载机制装载到所述java程序中;
创建单元,用于基于配置后的所述java程序的运行参数和所述JVM实例,创建并启动JVM实例。
6.根据权利要求5所述的装置,其特征在于,所述装置还包括:
接收单元,用于接收用户输入的自定义动态链接库文件;
装载单元,用于根据Linux的LD_PRELOAD预加载机制,将所述自定义动态链接库文件装载到所述java程序中。
7.根据权利要求5所述的装置,其特征在于,所述配置单元,包括:
编排模块,用于通过所述JNIEnv接口,利用自定义动态链接库文件对所述java程序的运行参数进行编排;
配置模块,用于在编排后的所述java程序的运行参数的列表末尾配置探针参数。
8.根据权利要求5所述的装置,其特征在于,所述创建单元,包括:
创建模块,用于基于配置后的所述java程序的运行参数,执行对应的创建方法创建JVM实例;
运行模块,用于在所述JVM实例中运行所述探针参数对应的探针程序;
启动模块,用于启动所述JVM实例。
9.一种电子设备,其特征在于,包括:
存储器和处理器;
其中,所述存储器用于存储程序;
所述处理器用于执行所述程序,所述程序被执行时,具体用于实现如权利要求1至4任意一项所述的一种JVM探针的配置方法。
10.一种计算机存储介质,其特征在于,用于存储计算机程序,所述计算机程序被执行时,用于实现如权利要求1至4任意一项所述的一种JVM探针的配置方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410055065.XA CN117873833A (zh) | 2024-01-15 | 2024-01-15 | 一种jvm探针的配置方法及装置、电子设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410055065.XA CN117873833A (zh) | 2024-01-15 | 2024-01-15 | 一种jvm探针的配置方法及装置、电子设备、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117873833A true CN117873833A (zh) | 2024-04-12 |
Family
ID=90580689
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410055065.XA Pending CN117873833A (zh) | 2024-01-15 | 2024-01-15 | 一种jvm探针的配置方法及装置、电子设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117873833A (zh) |
-
2024
- 2024-01-15 CN CN202410055065.XA patent/CN117873833A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9811360B2 (en) | Dynamic determination of application server runtime classloading | |
US7784043B2 (en) | Method and system for automated code-source indexing in Java Virtual Machine environment | |
US8799885B2 (en) | Method and system for automated root-cause analysis for class loading failures in java | |
US8739147B2 (en) | Class isolation to minimize memory usage in a device | |
US6918106B1 (en) | Method and apparatus for collocating dynamically loaded program files | |
US20060161898A1 (en) | Method and system for project library dependency management | |
US20090249311A1 (en) | Sharing a native module of compiled code using an abstraction module of interpreted code in a virtual machine environment | |
US6834391B2 (en) | Method and apparatus for automated native code isolation | |
JP2008502968A (ja) | 中間オブジェクト指向言語を備えるソフトウェアをポータブル・デバイスにロードするための方法 | |
US20090235284A1 (en) | Cross-platform compatibility framework for computer applications | |
CN113986395B (zh) | 一种linux系统下应用依赖自包含技术的打包方法 | |
US11157249B1 (en) | Method and system for identifying and extracting independent services from a computer program | |
US10552135B1 (en) | Reducing a size of an application package | |
CN117873833A (zh) | 一种jvm探针的配置方法及装置、电子设备、存储介质 | |
CN111651169A (zh) | 基于web容器的区块链智能合约运行方法及系统 | |
Turner et al. | Creating XPCOM Components | |
CN112148318B (zh) | 应用包发布方法、应用方法、装置、介质、服务器及设备 | |
CN112433816A (zh) | 基于Javascript引擎的性能优化方法和装置 | |
Paal et al. | Java class deployment using class collections | |
US20220283789A1 (en) | Methods and apparatuses for providing a function as a service platform | |
CN116302361A (zh) | 镜像构建方法、装置、处理器及电子设备 | |
CN115640005A (zh) | 混合应用的生成方法及装置 | |
Schaefer | JBoss 3.0: Quick Start Guide | |
CN118012442A (zh) | 程序部署方法、装置、计算机程序产品及电子设备 | |
CN117093255A (zh) | 应用程序的版本构建方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination |