System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及低代码开发,尤其涉及一种基于graalvm的动态代码运行时资源监控与限制方法。
技术介绍
1、在数字化转型的浪潮下,低代码开发平台不断涌现,使企业能更敏捷地应对日益增多的个性化需求,低代码平台的其中一个核心功能,是支持用户在低代码平台上编写关键业务代码片段,并动态嵌入到低代码应用中运行,以满足定制化业务需求。
2、常规的低代码平台会使用jdk提供的rhino引擎或nashorn引擎来执行用户编写的javascript代码,但由于性能和语法兼容等原因,新版本的java已经弃用了rhino引擎和nashorn引擎,推荐使用graalvm取而代之,然而,graalvm尚未提供完备的运行时资源限制功能,低代码平台上动态执行用户编写的代码时,可能出现用户代码把计算资源耗尽而导致系统崩溃,所以graalvm无法完全满足低代码平台的需求,因此,需要一种基于graalvm的动态代码运行时资源监控与限制方法以限制执行过程中使用的cpu和内存资源。
技术实现思路
1、本部分的目的在于概述本专利技术的实施例的一些方面以及简要介绍一些较佳实施例。在本部分以及本申请的说明书摘要和专利技术名称中可能会做些简化或省略以避免使本部分、说明书摘要和专利技术名称的目的模糊,而这种简化或省略不能用于限制本专利技术的范围。
2、鉴于上述的问题,提出了本专利技术。
3、因此,本专利技术目的是提供一种基于graalvm的动态代码运行时资源监控与限制方法,其用于解决使用graa
4、为解决上述技术问题,本专利技术提供如下技术方案:一种基于graalvm的动态代码运行时资源监控与限制方法,包括在java程序启动时执行的初始化阶段和执行动态代码片段时执行的执行阶段;
5、其中,初始化阶段步骤包括:
6、a1,初始化线程池,并配置线程池的最小线程数,最大线程数和核心线程数;
7、a2,加载执行动态代码片段的资源限制参数;
8、执行阶段步骤包括:
9、b1,当需要执行动态代码片段时,启动调度线程,并初始化共享内存对象;
10、b2,在调度线程中启动执行线程,在执行线程中通过graalvm提供的context对象执行动态代码;
11、b3,调度线程启动执行线程后,循环检测执行线程的状态和资源使用情况直到执行结束,并返回执行结果。
12、作为本专利技术所述一种基于graalvm的动态代码运行时资源监控与限制方法的一种优选方案,其中:所述资源限制参数包括最大cpu时间和最大的内存使用量。
13、作为本专利技术所述一种基于graalvm的动态代码运行时资源监控与限制方法的一种优选方案,其中:所述最大cpu时间为2秒,所述最大的内存使用量为50mb。
14、作为本专利技术所述一种基于graalvm的动态代码运行时资源监控与限制方法的一种优选方案,其中:所述共享内存对象包括用于记录执行线程对象的execthread属性、用于记录动态代码是否执行结束的isfinished属性和用于记录动态代码执行结果的result属性。
15、作为本专利技术所述一种基于graalvm的动态代码运行时资源监控与限制方法的一种优选方案,其中,b2工作步骤包括:
16、b2-1,获取执行线程的对象并设置到共享内存对象中;
17、b2-2,实例化graalvm提供的context对象,并通过context对象的eval方法执行动态代码;
18、b2-3,当动态代码执行结束,或检测到执行线程被中止,则往共享内存对象中isfinished属性设置为true,同时把动态代码的执行结果也设置到共享内存对象中。
19、作为本专利技术所述一种基于graalvm的动态代码运行时资源监控与限制方法的一种优选方案,其中,b3工作步骤包括:
20、b3-1,开始执行循环检测中的步骤;
21、b3-2,通过共享内存对象获取到执行线程的线程对象;
22、b3-3,查询执行线程的初始cpu时间和内存分配情况,供后续计算执行线程实际资源使用情况使用;
23、b3-4,通过查询共享内存对象中isfinished属性判断执行线程是否已结束,如未结束执行b3-5,否则执行b3-10;
24、b3-5,查询当前时刻下执行线程的资源使用情况,查询方法同b3-3;
25、b3-6,计算b3-5和b3-3之间的差值,得出执行线程已消耗的cpu时间和内存使用量;
26、b3-7,结合b3-6的结果和初始化阶段获取的资源限制参数,判断执行线程使用的资源是否已超出了限制,如果是,执行b3-8,否则执行b3-9;
27、b3-8,通过jdk的thread.interrupt方法中止执行线程,执行b3-11;
28、b3-9,休眠一段时间,再次执行b3-4;
29、b3-10,从共享内存对象中获取动态代码的执行结果或执行线程的异常信息;
30、b3-11,若动态代码执行成功,则将执行结果返回给调用方,否则抛出异常,表示动态代码执行失败。
31、作为本专利技术所述一种基于graalvm的动态代码运行时资源监控与限制方法的一种优选方案,其中:b3-3和b3-5中查询cpu时间和内存分配的方法包括:使用jdk提供的threadmxbean.getthreadcputime方法获取执行线程的cpu时间,使用jdk提供的threadmxbean.getthreadallocatedbytes方法获取执行线程的内存使用量。
32、作为本专利技术所述一种基于graalvm的动态代码运行时资源监控与限制方法的一种优选方案,其中:b3-9中休眠时间设置为剩余cpu时间和10毫秒的最大值。
33、作为本专利技术所述一种基于graalvm的动态代码运行时资源监控与限制方法的一种优选方案,其中:b3-8中调用thread.interrupt方法后通过查询共享内存对象判断执行线程是否已经停止,未停止则调用thread.stop方法强制结束执行线程。
34、作为本专利技术所述一种基于graalvm的动态代码运行时资源监控与限制方法的一种优选方案,其中:所述最小线程数、最大线程数和核心线程数根据实际内存分配情况配置。
35、本专利技术的有益效果:提出了对动态代码运行时资源的监控与限制的方法,保证java程序的cpu与内存资源不会被动态代码耗尽,增强程序的健壮性,也满足的低代码平台对动态代码执行引擎的业务诉求,和现有技术相比,使java程序中使用graalvm执行动态代码时使用的资源变得可以监控,并且可以立即中止所用资源超出限制的动态代码。
本文档来自技高网...【技术保护点】
1.一种基于GraalVM的动态代码运行时资源监控与限制方法,其特征在于:包括在Java程序启动时执行的初始化阶段和执行动态代码片段时执行的执行阶段;
2.根据权利要求1所述的一种基于GraalVM的动态代码运行时资源监控与限制方法,其特征在于:所述资源限制参数包括最大CPU时间和最大的内存使用量。
3.根据权利要求2所述的一种基于GraalVM的动态代码运行时资源监控与限制方法,其特征在于:所述最大CPU时间为2秒,所述最大的内存使用量为50MB。
4.根据权利要求2或3所述的一种基于GraalVM的动态代码运行时资源监控与限制方法,其特征在于:所述共享内存对象包括用于记录执行线程对象的execThread属性、用于记录动态代码是否执行结束的isFinished属性和用于记录动态代码执行结果的result属性。
5.根据权利要求4所述的一种基于GraalVM的动态代码运行时资源监控与限制方法,其特征在于,b2工作步骤包括:
6.根据权利要求5所述的一种基于GraalVM的动态代码运行时资源监控与限制方法,其特征在于,b
7.根据权利要求6所述的一种基于GraalVM的动态代码运行时资源监控与限制方法,其特征在于,b3-3和b3-5中查询CPU时间和内存分配的方法包括:使用JDK提供的ThreadMXBean.getThreadCpuTime方法获取执行线程的CPU时间,使用JDK提供的ThreadMXBean.getThreadAllocatedBytes方法获取执行线程的内存使用量。
8.根据权利要求6所述的一种基于GraalVM的动态代码运行时资源监控与限制方法,其特征在于:b3-9中休眠时间设置为剩余CPU时间和10毫秒的最大值。
9.根据权利要求6所述的一种基于GraalVM的动态代码运行时资源监控与限制方法,其特征在于:b3-8中调用Thread.interrupt方法后通过查询共享内存对象判断执行线程是否已经停止,未停止则调用Thread.stop方法强制结束执行线程。
10.根据权利要求1所述的一种基于GraalVM的动态代码运行时资源监控与限制方法,其特征在于:a1中所述最小线程数、最大线程数和核心线程数根据实际内存分配情况配置。
...【技术特征摘要】
1.一种基于graalvm的动态代码运行时资源监控与限制方法,其特征在于:包括在java程序启动时执行的初始化阶段和执行动态代码片段时执行的执行阶段;
2.根据权利要求1所述的一种基于graalvm的动态代码运行时资源监控与限制方法,其特征在于:所述资源限制参数包括最大cpu时间和最大的内存使用量。
3.根据权利要求2所述的一种基于graalvm的动态代码运行时资源监控与限制方法,其特征在于:所述最大cpu时间为2秒,所述最大的内存使用量为50mb。
4.根据权利要求2或3所述的一种基于graalvm的动态代码运行时资源监控与限制方法,其特征在于:所述共享内存对象包括用于记录执行线程对象的execthread属性、用于记录动态代码是否执行结束的isfinished属性和用于记录动态代码执行结果的result属性。
5.根据权利要求4所述的一种基于graalvm的动态代码运行时资源监控与限制方法,其特征在于,b2工作步骤包括:
6.根据权利要求5所述的一种基于graalvm的动态代码运行时资源监控与限制方法,其特征在于,b3工作步...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。