当前位置: 首页 > 专利查询>浙江大学专利>正文

一种java-lua混合方法调用栈的获取方法及装置制造方法及图纸

技术编号:33372834 阅读:12 留言:0更新日期:2022-05-11 22:39
本发明专利技术公开提供了一种java

【技术实现步骤摘要】
一种java

lua混合方法调用栈的获取方法及装置


[0001]本专利技术涉及性能分析领域,尤其涉及一种java

lua应用程序性能分析数据的获取方法、装置、设备及存储介质。

技术介绍

[0002]性能分析(performance analysis也称为profiling),是以收集程序运行时信息为手段研究程序行为的分析方法,是一种动态程序分析的方法。性能分析量测像是程序的空间或时间复杂度、特定指令的使用情形、函数调用的频率及运行时间等。性能分析的目的在于决定程序的哪个部分应该被优化,从而提高程序的速度或者内存使用效率。性能分析可以由程序的源代码或是可执行档进行。一般会使用称为性能分析工具(profiler)的工具进行。性能分析工具会使用许多不同的技术,可能是以事件为基础(Event

based)的、统计的、指令导向的、仿真的方法。性能分析工具常用在性能工程的过程中使用。
[0003]调用栈是计算机科学中存储有关正在运行的子程序的消息的栈。有时仅称“栈”,但栈中不一定仅存储子程序消息。几乎所有计算机程序都依赖于调用栈,然而高级语言一般将调用栈的细节隐藏至后台。调用栈最经常被用于存放子程序的返回地址。在调用任何子程序时,主程序都必须暂存子程序运行完毕后应该返回到的地址。因此,如果被调用的子程序还要调用其他的子程序,其自身的返回地址就必须存入调用栈,在其自身运行完毕后再行取回。在递归程序中,每一层次递归都必须在调用栈上增加一条地址,因此如果程序出现无限递归(或仅仅是过多的递归层次),调用栈就会产生栈溢出。
[0004]Java是目前比较流行的编程语言,在基于java语言编写的应用程序中,会存在调用lua 相关脚本逻辑的情况。而业内的性能分析工具通常仅能够针对单一的java编程语言进行性能分析。
[0005]JMC是Java 7u40新增加的性能监控工具。可以对程序进行性能分析,并可视化数据,看起来相当的直观。JMC读取java应用程序概要分析样本的集合,并生成报告以可视化并帮助分析数据。它可以生成文本和图形报告(通过使用点可视化程序包),用于描述一组调用栈和符号化信息。一种常见用法是从统计分析中表示一组采样的调用堆栈。当你的应用程序遇到性能瓶颈时,可以使用这个工具来进行调试并优化程序。
[0006]TProfiler是淘宝开源的一个可以在生产环境长期使用的性能分析工具。它同时支持剖析和采样两种方式,记录方法执行的时间和次数,生成方法热点、对象热点、线程状态分析等数据,为查找系统性能瓶颈提供数据支持。TProfiler在JVM启动时把时间采集程序注入到字节码中,整个过程无需修改应用源码。运行时会把数据写到日志文件,一般情况下每小时输出的日志小于50M。目前TProfiler已应用于淘宝的核心Java前端系统,部署后低峰期对应用响应时间影响20%高峰期对吞吐量大约有30%的降低。
[0007]然而,对于java调用lua相关脚本逻辑的应用程序,在程序运行中,如何对java、lua两种语言调用栈同时进行采样,并将调用栈数据准确缝合处理,一直是业内亟待解决的问题。在业内现有的技术方案、技术工具中,大多数只能针对单一语言进行性能分析。如使
用阿里官方提供的性能调优分析工具TProfiler对java调用lua相关脚本逻辑的应用程序进行性能分析,只能看到java程序调用栈等相关性能分析数据,lua函数调用栈等相关性能分析数据缺失。但是程序开发人员希望看到从整体上包含java、lua全部性能分析数据完整的结果。
[0008]本技术主要针对,专利技术一种全新的混合方法调用栈获取方法,提供一种可同时对java与 lua进行性能分析,同时支持java与lua两种语言调用栈准确缝合处理的方案及系统。

技术实现思路

[0009]本专利技术的目的主要针对java调用lua相关脚本逻辑的应用程序,业内无法完整对其进行性能分析的问题,提供一种java

lua混合方法调用栈的获取方法及装置。
[0010]本专利技术的目的是通过以下技术方案来实现的:一种java

lua混合方法调用栈的获取方法,包括以下步骤:
[0011]步骤1:首先在目标java应用程序进入stop the world状态暂停运行;
[0012]步骤2:获取目标java应用程序的java方法调用栈,将获取到的java方法调用栈数据暂时保存;
[0013]步骤3:获取目标java应用程序的lua方法调用栈,将获取到的lua方法调用栈数据暂时保存;步骤4:让目标java应用程序离开stop the world状态继续运行。
[0014]步骤5:将上述步骤2获取的java方法调用栈和步骤3获取的lua方法调用栈进行数据缝合处理,得到缝合后java

lua混合方法调用栈;
[0015]步骤6:将最后缝合后java

lua混合方法调用栈数据上传至云服务。
[0016]进一步地:所述步骤3具体为:通过所述目标java应用程序中的LuaJ虚拟机,获取所述 LuaJ虚拟机对应的lua方法调用栈。
[0017]进一步地:所述步骤5包括以下子步骤;
[0018](5.1)确定所述目标java应用程序的java方法调用栈中的目标方法栈帧;其中,所述目标方法栈帧为表征java方法调用lua方法的栈帧;
[0019](5.2)基于所述目标方法栈帧在所述目标缝合java方法调用栈中的位置,将所述目标java 应用程序的java方法调用栈与所述目标java应用程序的lua方法调用栈进行数据缝合处理,得到缝合后java

lua混合方法调用栈。
[0020]进一步地:所述步骤(5.2)具体为:将所述目标java应用程序的lua方法调用栈缝合至所述所述目标java应用程序的java方法调用栈与所述目标方法栈帧相邻的下一个栈帧的位置,得到缝合后java

lua混合方法调用栈。
[0021]进一步地:所述步骤2中所述获取目标java应用程序的java方法调用栈具体为:在预设采样周期内,当java应用程序暂停运行时,所述步骤3中所述获取目标java应用程序的lua 方法调用栈具体为:在所述预设采样周期内,当java应用程序暂停运行时,获取所述目标java 应用程序所调用的lua方法调用栈。
[0022]进一步地:所述方法应用于性能分析工具,所述性能分析工具集成在所述目标应用程序中。
[0023]一种java

lua混合方法调用栈的获取装置,所述装置包括:
[0024]第一获取模块,用于获取目标应用程序的java方法调用栈,并将获取到的java方法调用栈数据暂时保存;
[0025]第二获取模块,用于获取所述目标应用程序的lua方法调用栈,并将获取到的lua方法调用栈数据暂时保存;...

【技术保护点】

【技术特征摘要】
1.一种java

lua混合方法调用栈的获取方法,其特征在于:方法包括:步骤1:首先在目标java应用程序进入stop the world状态暂停运行;步骤2:获取目标java应用程序的java方法调用栈,将获取到的java方法调用栈数据暂时保存;步骤3:获取目标java应用程序的lua方法调用栈,将获取到的lua方法调用栈数据暂时保存;步骤4:让目标java应用程序离开stop the world状态继续运行。步骤5:将上述步骤2获取的java方法调用栈和步骤3获取的lua方法调用栈进行数据缝合处理,得到缝合后java

lua混合方法调用栈;步骤6:将最后缝合后java

lua混合方法调用栈数据上传至云服务。2.根据权利要求1所述的一种java

lua混合方法调用栈的获取方法,其特征在于:所述步骤3具体为:通过所述目标java应用程序中的LuaJ虚拟机,获取所述LuaJ虚拟机对应的lua方法调用栈。3.根据权利要求1所述的一种java

lua混合方法调用栈的获取方法,其特征在于:所述步骤5包括以下子步骤;(5.1)确定所述目标java应用程序的java方法调用栈中的目标方法栈帧;其中,所述目标方法栈帧为表征java方法调用lua方法的栈帧;(5.2)基于所述目标方法栈帧在所述目标缝合java方法调用栈中的位置,将所述目标java应用程序的java方法调用栈与所述目标java应用程序的lua方法调用栈进行数据缝合处理,得到缝合后java

lua混合方法调用栈。4.根据权利要求3所述的一种java

lua混合方法调用栈的获取方法,其特征在于:所述步骤(5.2)具体为:将所述目标java应用程序的lua方法调用栈缝合至所述所述目标java应用程序的java方法调用栈与所述目标方法栈帧相邻的下一个栈帧的位置,得到缝合后java

...

【专利技术属性】
技术研发人员:胡天磊朱鹏陈珂寿黎但江大伟陈刚
申请(专利权)人:浙江大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1