Java应用程序性能问题定位的方法、装置和设备与流程

文档序号:14043673阅读:296来源:国知局

本发明实施例涉及通信工程技术,尤其涉及一种java应用程序性能问题定位的方法、装置和设备。



背景技术:

当java应用程序的运行出现问题时,快速的定位java应用程序的性能问题,可以快速的解决该性能问题,以使java应用程序恢复正常运行。

目前,后端开发用户可通过查看大量的java应用程序日志,获取java应用程序最近的运行过程,逐步猜测测试以定位java应用程序性能问题;或者用户回溯java应用程序或者java应用程序启动时设置的参数最近的改动,确定改动部分是否为造成性能问题的原因。

但是上述java应用程序性能定位方法,需要耗费大量的人力,过程复杂,从而定位效率低。



技术实现要素:

本发明实施例提供一种java应用程序性能问题定位的方法、装置和设备,以克服现有技术中java应用程序性能定位方法比较复杂造成的定位效率低的技术问题。

第一方面,本发明实施例提供一种java应用程序性能问题定位的方法,应用于服务器,包括:

根据用户输入的问题定位指令,获取至少一个java进程的进程信息;

对于服务器的每个目标系统资源,根据所有java进程的进程信息,从所述至少一个java进程中确定消耗所述目标系统资源最高的目标java进程;

根据所有目标java进程的进程信息,获取问题定位文件;所述问题定位文件包括每个目标java进程对应的应用程序的当前执行语句所在的java文件的名称和在所述java文件中的行号,所述问题定位文件用于指示用户根据java文件的名称和行号,获取至少一个当前执行程序语句,以判断至少一个当前执行程序语句是否为问题程序语句。

在一种可能的设计中,根据所有目标java进程的进程信息,获取问题定位文件,包括:

对于每个目标java进程,根据所述目标java进程包括的至少一个线程的线程信息,从所述至少一个线程中,确定消耗相应目标系统资源最高的目标线程;

对于每个目标线程,根据所述目标线程对应的方法栈信息,确定所述目标线程对应的java应用程序的当前执行程序语句所在的java文件的名称和当前执行的程序语句在所述java文件中的行号;

根据所有java文件的名称和与相应java文件对应的行号,得到问题定位文件。

在一种可能的设计中,在对于每个目标java进程,根据所述目标java进程包括的至少一个线程的线程信息,从所述至少一个线程中,确定消耗相应目标系统资源最高的目标线程之前,所述方法还包括:

对于每个目标java进程,获取所述目标java进程包括的所有线程的线程信息。

在一种可能的设计中,至少一个目标系统资源包括:系统cpu、系统内存和磁盘i/o;

对于服务器的每个目标系统资源,根据所有java进程的进程信息,从所述至少一个java进程中确定消耗所述目标系统资源最高的目标java进程,包括:

根据所有java进程的进程信息,从至少一个java进程中确定系统cpu使用率最高的第一目标java进程、实际占用系统内存最高的第二目标java进程和磁盘i/o利用率最高的第三目标java进程;

则所述对于每个目标java进程,根据所述目标java进程包括的至少一个线程的线程信息,从所述至少一个线程中,确定消耗相应目标系统资源最高的目标线程,包括:

对于第一目标java进程,据所述第一目标java进程包括的至少一个第一线程的线程信息,从至少一个第一线程中,确定系统cpu使用率最高的第一目标线程;

对于第二目标java进程,据所述第二目标java进程包括的至少一个第二线程的线程信息,从至少一个第二线程中,确定实际占用系统内存最高的第二目标线程;

对于第三目标java进程,据所述第三目标java进程包括的至少一个第三线程的线程信息,从至少一个第三线程中,确定磁盘i/o利用率最高的第三目标线程。

在一种可能的设计中,在根据至少一个目标java进程的进程信息,得到问题定位文件之前,所述方法还包括:

对于每个目标java进程,获取所述目标java进程对应的java应用程序运行过程中的实际配置参数信息、内存分配信息、内存堆信息、内存回收统计信息和内存对象统计信息;

则根据所有目标java进程的进程信息,获取问题定位文件,包括:

根据所有java文件的名称、与相应java文件对应的行号、所有目标java进程的所述实际配置参数信息、内存分配信息、内存堆信息、内存回收统计信息和内存对象统计信息,得到问题定位文件;

其中,所述实际配置参数信息用于用户判断所述java应用程序在启动时的多个配置参数是否与相应的预设配置参数相同,所述内存分配信息和内存堆信息用于用户判断所述java应用程序的内存分配相关参数的配置是否合理,所述内存回收统计信息用于用户判断所述java应用程序垃圾回收参数的配置是否合理,所述内存对象统计信息用于指示用户判断包括占用内存最高的存活对象的程序语句是否为问题程序语句。

在一种可能的设计中,在根据所有目标java进程的进程信息,获取问题定位文件之前,所述方法还包括:

对于每个java进程,获取所述java进程的死锁信息;

则根据所有目标java进程的进程信息,获取问题定位文件,包括:

根据所有java文件的名称、与相应java文件对应的行号、所有目标java进程的所述实际配置参数信息、内存分配信息、内存堆信息、内存回收统计信息、内存对象统计信息和所有java进程的死锁信息,得到问题定位文件;

在死锁信息不为空的情况下,所述死锁信息用于指示用户判断相应java应用程序中包括所述死锁信息中的对象的程序语句是否为问题程序语句。

在一种可能的设计中,所述方法还包括:

根据用户输入的问题定位指令,获取系统信息;

对于每个目标系统资源,根据系统信息中指示的所有java进程消耗所述目标系统资源的程度,确定所述目标系统资源影响java应用程序性能的级别;

其中,所述目标系统资源影响java应用程序性能的级别用于指示所述问题定位文件中的各信息在所述问题定位文件中存储位置和存储方式。

第二方面,本发明实施例提供一种java应用程序性能问题定位的方法,包括:

进程信息获取模块,用于根据用户输入的问题定位指令,获取至少一个java进程的进程信息;

目标java进程确定模块,用于对于服务器的每个目标系统资源,根据所有java进程的进程信息,从所述至少一个java进程中确定消耗所述目标系统资源最高的目标java进程;

问题定位文件获取模块,用于根据所有目标java进程的进程信息,获取问题定位文件;所述问题定位文件包括每个目标java进程对应的应用程序的当前执行语句所在的java文件的名称和在所述java文件中的行号,所述问题定位文件用于指示用户根据java文件的名称和行号,获取至少一个当前执行程序语句,以判断至少一个当前执行程序语句是否为问题程序语句。

第三方面,本发明实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,在所述计算机程序被处理器执行时,执行第一方面任一可能设计中的方法。

第四方面,本发明实施例提供一种电子设备,包括处理器和存储器,其中,

存储器,用于存储程序;

处理器,用于执行所述存储器存储的所述程序,当所述程序被执行时,所述处理器用于执行第一方面任一可能设计中的方法。

本发明中的java应用程序性能问题定位的方法,当应用系统出现问题时,后端开发用户只需通过辅助设备向服务器发送问题定位指令,服务器根据问题定位指令得到问题定位文件,后端开发用户根据问题定位文件就可以快速的定位java应用程序性能问题,定位过程简单,效率高,无需耗费大量的人力。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的java应用程序性能问题定位的方法实施例一的流程图;

图2为本发明实施例提供的java应用程序性能问题定位的方法实施例二的流程图;

图3为本发明实施例提供的java应用程序性能问题定位的方法实施例三的流程图;

图4为本发明实施例提供的java应用程序性能问题定位的装置实施例一的结构示意图;

图5为本发明实施例提供的java应用程序性能问题定位的装置实施例二的结构示意图;

图6为本发明实施例提供的java应用程序性能问题定位的装置实施例三的结构示意图;

图7为本申请提供的电子设备的示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例提供的java应用程序性能问题定位的方法实施例一的流程图,如图1所示,本实施例的方法可以包括:

步骤s101、根据用户输入的问题定位指令,获取至少一个java进程的进程信息;

步骤s102、对于服务器的每个目标系统资源,根据所有java进程的进程信息,从至少一个java进程中确定消耗该目标系统资源最高的目标java进程;

步骤s103、根据所有目标java进程的进程信息,获取问题定位文件;问题定位文件包括每个目标java进程对应的应用程序的当前执行语句所在的java文件的名称和在该java文件中的行号,问题定位文件用于指示用户根据java文件的名称和行号,获取至少一个当前执行程序语句,以判断至少一个当前执行程序语句是否为问题程序语句。

具体地,本实施例的执行主体可为java应用程序性能问题定位的装置,该装置集成在服务器中,可基于硬件或软件实现。

当java应用程序后端维护人员发现服务器端对应的java应用程序的运行出现了问题,比如,对客户端的某一或者某些请求响应很慢,此时,java应用程序后端维护人员,通过辅助设备输入问题定位指令,辅助设备将问题定位指令发送至服务器。

服务器在接收到问题定位指令后,获取java进程信息,以得到用于指示用户定位当前运行的java应用程序的性能问题的问题定位文件。

下面对服务器获取问题定位文件的具体过程进行详细的说明。

当前服务器中至少有一个java进程在运行,获取该至少一个java进程的进程信息。其中,linux系统可采用top命令或者iotop命令获取至少一个java进程的进程信息,windows系统可采用wmic命令获取至少一个java进程的进程信息。

具体地,每个java进程的进程信息包括:进程id;父进程id;用户名称;进程所有者的用户id;进程所有者的用户名;进程所有者的组名;启动进程的终端名,不是从终端启动的进程则显示为“?”;优先级;nice值:负值表示高优先级,正值表示低优先级;最后使用的cpu,仅在多cpu环境下有意义;上次更新到现在的cpu时间占用百分比;进程使用的cpu时间总计,单位秒;进程使用的cpu时间总计,单位1/100秒;进程使用的物理内存百分比;进程使用的虚拟内存总量,单位kb;进程使用的虚拟内存中,被换出的大小,单位kb;进程使用的、未被换出的物理内存大小,单位kb;可执行代码占用的物理内存大小,单位kb;可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb;共享内存大小,单位kb;页面错误次数;最后一次写入到现在,被修改过的页面数等等。

根据所有java进程的进程信息,从至少一个java进程中确定出至少一个目标java进程,即:对于服务器的每个目标系统资源,根据所有java进程的进程信息,从至少一个java进程中确定消耗目标系统资源最高的目标java进程。

服务器的系统资源包括多种,从m个系统资源中确定出n个目标系统资源,n≤m;比如,目标系统资源可为系统cpu、系统内存和磁盘i/o。

此时,对于服务器的每个目标系统资源,根据所有java进程的进程信息,从至少一个java进程中确定消耗目标系统资源最高的目标java进程,具体为:根据所有java进程的进程信息,从至少一个java进程中确定系统cpu使用率最高的第一目标java进程、实际占用系统内存最高的第二目标java进程和磁盘i/o利用率最高的第三目标java进程。

其中,每个java进程的实际占用系统内存和磁盘i/o利用率可根据相应java进程中的相关信息计算得到,计算方法可采用现有技术中的计算方法,本实施例不再赘述。

本领域技术人员可以理解的是,第一目标java进程、第二目标java进程和第三目标java进程之间至少两个不相同或者至少两个相同。比如:第一目标java进程、第二目标java进程和第三目标java进程为同一个java进程;或者第一目标java进程、第二目标java进程和第三目标java进程为互不相同的java进程;或者第一目标java进程和第二目标java进程相同,第一目标java进程和第三目标java进程不相同。

在得到了第一目标java进程、第二目标java进程和第三目标java进程之后,分别获取第一目标java进程、第二目标java进程和第三目标java进程各自包括的每个线程的线程信息。

其中,线程信息包括的内容项和进程信息包括的内容项相似,此处不再赘述。linux系统可采用top命令或者iotop命令获取目标java进程的线程信息,windows系统可采用pslist命令获取目标java进程的线程信息。

接着,根据各目标程各自包括的至少一个线程的线程信息,确定至少一个目标线程,即对于每个目标java进程,根据该目标java进程包括的至少一个线程的线程信息,从其包括的至少一个线程中,确定消耗相应目标系统资源最高的目标线程;具体如下:

(a)、对于第一目标java进程,根据第一目标java进程包括的至少一个第一线程的线程信息,从其包括的至少一个第一线程中,确定系统cpu使用率最高的第一目标线程;

(b)、对于第二目标java进程,据所述第二目标java进程包括的至少一个第二线程的线程信息,从其包括的至少一个第二线程中,确定实际占用系统内存最高的第二目标线程;

(c)、对于第三目标java进程,据所述第三目标java进程包括的至少一个第三线程的线程信息,从其包括的至少一个第二线程中,确定磁盘i/o利用率最高的第三目标线程。

本领域技术人员可以理解的是,无论第一目标java进程、第二目标java进程和第三目标java进程是否相同,目标线程的个数不会超过3个:即若第一目标java进程、第二目标java进程和第三目标java进程相同,目标线程的个数为1个、2个或3个;若第一目标java进程、第二目标java进程和第三目标java进程之间互不相同,目标线程的个数为3个;若第一目标java进程、第二目标java进程和第三目标java进程之间有两个相同,则目标线程的个数为2个或3个。

对于每个目标线程,根据目标线程对应的方法栈信息,确定目标线程对应的java应用程序的当前执行程序语句所在的java文件的名称和当前执行的程序语句在该java文件中的行号。

其中,每个目标线程对应一个方法栈。方法栈是一个栈的结构,用于保存应用程序执行时方法的调用信息,包括调用方法的方法名,调用该方法的程序语句所在的java文件名以及该程序语句在该java文件中的行号等信息。

比如,在应用程序的运行过程中,当运行到a程序语句时,a程序语句被执行,执行该a程序语句时需要调用某执行方法,则该执行方法的调用信息会被存储在方法栈中的预设位置,该预设位置中保存有该执行方法的方法名、该a程序语句所在的java文件名和该a程序语句在该java文件中的行号。因此,a执行语句所在的java文件名和a程序语句在该java文件中的行号均可从方法栈的预设位置获取到。

那么,目标线程的当前执行程序语句所在的java文件的名称和当前执行的程序语句在该java文件中的行号,也可在该目标线程对应的方法栈中获取到。

接着,根据所有java文件的名称和与相应java文件对应的行号,得到问题定位文件;问题定位文件用于用户根据java文件的名称和行号,获取至少一个当前执行程序语句后,判断至少一个当前执行程序语句是否为问题程序语句。

因此,当目标线程只有一个时,问题定位文件中包括该目标线程对应的当前执行程序语言所在的java文件的名称和在该java文件中的行号。

当目标线程不止有一个时,问题定位文件中包括至少一个java文件的名称和至少一个与相应java文件对应的行号。比如问题定位文件中包括两个java文件的名称,那么java文件a对应一个行号,java文件b对应一个行号。

在问题定位文件得到后,服务器会将该问题定位文件发送至发送问题定位指令的辅助设备,通过辅助设备的显示屏向后端开发用户显示。后端开发用户通过查看问题定位文件,根据问题定位文件中包括的java文件的名称和与java文件对应的行号,从相应的java文件中找到对应的程序语句,判断该程序语句是否为问题程序语句,若是,说明java应用程序的性能问题至少出现在java应用程序的源代码的该程序语句上。

本实施例中的java应用程序性能问题定位的方法,当应用系统出现问题时,后端开发用户只需通过辅助设备向服务器发送问题定位指令,服务器根据问题定位指令得到问题定位文件,后端开发用户根据问题定位文件就可以快速的定位java应用程序性能问题,定位过程简单,效率高,无需耗费大量的人力。

本实施例中的java应用程序性能问题定位的方法,包括:根据用户输入的问题定位指令,获取至少一个java进程的进程信息;对于服务器的每个目标系统资源,根据所有java进程的进程信息,从至少一个java进程中确定消耗该目标系统资源最高的目标java进程;根据所有目标java进程的进程信息,获取问题定位文件;问题定位文件包括每个目标java进程对应的应用程序的当前执行语句所在的java文件的名称和在该java文件中的行号,问题定位文件用于指示用户根据java文件的名称和行号,获取至少一个当前执行程序语句,以判断至少一个当前执行程序语句是否为问题程序语句。本实施例中的java应用程序性能问题定位的方法定位过程简单,效率高,无需耗费大量的人力。

为了使得得到的问题定位文件可以全面的帮助用户定位java应用程序的性能问题,本实施例在上一实施例的基础上作了进一步的改进。

图2为本发明实施例提供的java应用程序性能问题定位的方法的流程图,如图2所示,本实施例的方法可以包括:

步骤s201、根据用户输入的问题定位指令,获取至少一个java进程的进程信息;

步骤s202、对于服务器的每个目标系统资源,根据所有java进程的进程信息,从至少一个java进程中确定消耗该目标系统资源最高的目标java进程;

步骤s203、根据所有目标java进程的进程信息,获取每个目标java进程对应的应用程序的当前执行语句所在的java文件的名称和在该java文件中的行号;

步骤s204、对于每个目标java进程,获取目标java进程对应的java应用程序运行过程中的实际配置参数信息、内存分配信息、内存堆信息、内存回收统计信息和内存对象统计信息;

步骤s205、根据所有java文件的名称、与相应java文件对应的行号、所有目标java进程所述实际配置参数信息、内存分配信息、内存堆信息、内存回收统计信息和内存对象统计信息,得到问题定位文件。

具体地,本实施中的步骤s201~步骤s203,参照上一实施例中的步骤s101~步骤s103,本实施例不再赘述。

对于步骤s204~步骤s205,对于每个目标java进程,可通过jinfo命令获取目标java进程对应的java应用程序运行过程中的实际配置参数信息;采用jmap-heap命令获取目标java进程对应的java应用程序运行过程中的内存分配信息和内存堆信息;采用jmap-histo命令获取目标java进程对应的java应用程序运行过程中的内存对象统计信息;采用jstat-gccanse命令获取目标java进程对应的java应用程序运行过程中的内存回收统计信息。

对于实际配置参数信息:实际配置参数信息包括多个java应用程序的实际配置参数的参数名称和参数值。比如开发用户本来想设置该java应用程序运行时的最大内存为2g,但是由于不小心把参数名称“最大内存”写错了或者参数值“2g”写错了,比如写成了“1g”,导致没有真的生效,那么java应用程序实际运行时的最大内存可能就只有1g,导致内存不够用,此时,获取的关于内存的真实配置参数的参数值为1g(正确的应该为2g)。此外,实际配置参数信息还包括:垃圾回收gc的实际配置参数和压缩指针的实际配置参数等等。

因此,后端开发用户可根据问题定位文件中的实际配置参数信息,判断该java应用程序在启动时的多个配置参数是否与相应的预设配置参数相同,若不相同,说明是java应用程序的配置参数影响了java应用程序的性能,则重新启动java应用程序后将各配置各参数配置为相应的预设配置参数。

对于内存分配信息和内存堆信息:内存堆分为新生代和老年代,比如,获取的内存分配信息为:为新生代分配的内存堆为1g,为老年代分配的内存堆为1g;通过获取的java应用程序运行过程中产生的内存堆信息发现java应用程序的特点是新生代的内存需求量更大,新生代内存总是很容易就满,而老年代却很空,新生代总满总导致新生代内存回收,影响了java应用程序的性能。

此时,用户可将分配给新生代的内存堆调整为1.5g,将分配给老年代的内存堆调整为0.5g。也就是说,内存分配信息和内存堆信息用于用户判断java应用程序在启动时的内存分配相关参数的配置是否合理,即是否因为内存分配相关参数的配置不合理,而影响了java应用程序的性能,若是(即虽然实际内存分配参数与预设内存分配参数相同,但是预设内存分配参数并不合理),则根据java应用程序的特点,修改内存分配相关参数,并重新启动java应用程序,将内存分配相关参数配置为修改后的参数。

对于内存对象统计信息:内存对象统计信息中包括占用内存最多且没有释放的存活对象。用户可根据内存回收统计信息中包括的存活对象,查找包括该存活对象的程序语句是否为问题程序语句,若是,则说明包括该存活对象的程序语句影响了java应用程序的性能。

对于内存回收统计信息:内存回收统计信息包括gc回收的信息。gc回收的信息包括:新生代和老年代进行gc的次数和消耗的时间,最近导致gc回收的原因,fullgc的频率等。

用户根据内存回收统计信息判断java应用程序的垃圾回收参数的配置是否合理,即是否因为垃圾回收参数的配置不合理,而影响了java应用程序的性能,若是(即虽然实际垃圾回收参数与预设垃圾回收参数相同,但是预设垃圾回收参数并不合理),修改垃圾回收参数,并重新启动java应用程序,将垃圾回收参数配置为修改后的参数。

进一步地,本实施例的方法还可包括:对于每个java进程,获取java进程的死锁信息;

则根据所有目标java进程的进程信息,获取问题定位文件,包括:

根据所有java文件的名称、与相应java文件对应的行号、所有目标java进程的实际配置参数信息、内存分配信息、内存堆信息、内存回收统计信息、内存对象统计信息和所有java进程的死锁信息,得到问题定位文件。

若死锁信息不为空,用户可通过死锁信息判断与死锁信息对的java应用程序中包括死锁信息中的对象的程序语句是否为问题程序语句。其中,可通过jstack命令获取每个java进程的死锁信息。

本实施例通过获取所有目标java进程的实际配置参数信息、内存分配信息、内存堆信息、内存回收统计信息、内存对象统计信息和所有java进程的死锁信息,使得问题定位文件包括更多的java应用程序运行过程中的信息,从而用户定位java应用程序性能问题所依据的信息更全面。

图3为本发明实施例提供的java应用程序性能问题定位的方法的流程图,如图3所示,本实施例的方法可以包括:

步骤s301、根据用户输入的问题定位指令,获取系统信息和至少一个java进程的进程信息;

步骤s302、对于服务器的每个目标系统资源,根据所有java进程的进程信息,从至少一个java进程中确定消耗该目标系统资源最高的目标java进程;

步骤s303、根据所有目标java进程的进程信息,获取每个目标java进程对应的应用程序的当前执行语句所在的java文件的名称和在该java文件中的行号;

步骤s304、对于每个目标java进程,获取目标java进程对应的java应用程序运行过程中的实际配置参数信息、内存分配信息、内存堆信息、内存回收统计信息和内存对象统计信息;

步骤s305、对于每个java进程,获取java进程的死锁信息;

步骤s306、对于每个目标系统资源,根据系统信息中指示的所有java进程消耗所述目标系统资源的程度,确定目标系统资源影响java影响应用程序性能的级别;

步骤s307、根据所有java文件的名称、与相应java文件对应的行号、所有目标java进程所述实际配置参数信息、内存分配信息、内存堆信息、内存回收统计信息、内存对象统计信息,所有java进程的死锁信息得到问题定位文件;其中,目标系统资源影响java应用程序性能的级别用于指示问题定位文件中的各信息在问题定位文件中存储位置和存储方式。

具体地,对于步骤s301:系统信息包括当前时间;系统运行时间;当前登录用户数;系统负载,即任务队列的平均长度;进程总数、正在运行的进程数、睡眠的进程数、停止的进程数、僵尸进程数;用户空间占用cpu百分比、内核空间占用cpu百分比、用户进程空间内改变过优先级的进程占用cpu百分比、空闲cpu百分比、等待输入输出的cpu时间百分比;物理内存总量、使用的物理内存总量、空闲内存总量、用作内核缓存的内存量、交换区总量、使用的交换区总量、空闲交换区总量和缓冲的交换区总量等。

对于步骤s302~步骤s305参照上一实施例中的相关步骤,本实施例不再赘述。

对于步骤s306,服务器的系统资源包括多种,从m个系统资源中确定出n个目标系统资源,n≤m;比如,目标系统资源可为系统cpu、系统内存和磁盘i/o。

根据系统信息,计算得到系统cpu使用率、实际系统内存使用量和磁盘i/o利用率。

若系统cpu使用率在第一预设范围内,且等待队列的个数超过了预设阈值,则说明系统cpu影响java应用程序性能的级别为高级别;若系统cpu使用率在第二预设范围内,则说明系统cpu影响java应用程序性能的级别为中级别;若系统cpu使用率在第三预设范围内,则说明系统cpu影响java应用程序性能的级别为低级别。

若实际系统内存使用量在第四预设范围内,则说明系统内存影响java应用程序性能的级别为高级别;若实际系统内存使用量在第五预设范围内,则说明系系统内存影响java应用程序性能的级别为中级别;若实际系统内存使用量在第六预设范围内,则说明系统内存影响java应用程序性能的级别为低级别;

若系统的磁盘i/o利用率在第七预设范围内,则说明系统内存影响java应用程序性能的级别为高级别;若系统的磁盘i/o利用率在第八预设范围内,则说明系系统内存影响java应用程序性能的级别为中级别。若系统的磁盘i/o利用率在第九预设范围内,则说明系系统内存影响java应用程序性能的级别为低级别。

对于步骤s307,标系统资源影响java应用程序性能的级别用于指示问题定位文件中的各信息在问题定位文件中存储位置和存储方式是指:若系统cpu影响java应用程序性能的级别为高级别,则问题定位文件中与第一目标java进程相关的信息突出显示,显示在第二目标java进程相关的信息和第三目标java进程相关的信息之前,因为第一目标java进程为cpu使用率最高的进程;其中,突出显示可为显示成预设的颜色、加粗显示或者在第一目标java进程相关的信息后增加高级别符号,比如可为h。

本实施例中通过根据目标系统资源影响java应用程序性能的级别确定问题定位文件中的各信息在问题定位文件中存储位置和存储方式,使得问题定位文件的指示作用更强,可更快的帮助用户定位java应用程序的性能问题。

图4为本发明实施例提供的java应用程序性能问题定位的装置实施例一的结构示意图,如图4所示,本实施例的装置可以包括:进程信息获取模块41、目标java进程确定模块42和问题定位文件获取模块43;

进程信息获取模块41,用于根据用户输入的问题定位指令,获取至少一个java进程的进程信息;目标java进程确定模块42,用于对于服务器的每个目标系统资源,根据所有java进程的进程信息,从所述至少一个java进程中确定消耗所述目标系统资源最高的目标java进程;问题定位文件获取模块43,用于根据所有目标java进程的进程信息,获取问题定位文件;所述问题定位文件包括每个目标java进程对应的应用程序的当前执行语句所在的java文件的名称和在该java文件中的行号,所述问题定位文件用于指示用户根据java文件的名称和行号,获取至少一个当前执行程序语句,以判断至少一个当前执行程序语句是否为问题程序语句。

问题定位文件获取模块43具体用于,对于每个目标java进程,根据目标java进程包括的至少一个线程的线程信息,从至少一个线程中,确定消耗相应目标系统资源最高的目标线程;对于每个目标线程,根据所述目标线程对应的方法栈信息,确定所述目标线程对应的java应用程序的当前执行程序语句所在的java文件的名称和当前执行的程序语句在所述java文件中的行号;根据所有java文件的名称和与相应java文件对应的行号,得到问题定位文件。

至少一个目标系统资源包括:系统cpu、系统内存和磁盘i/o,问题定位文件获取模块43具体用于,根据所有java进程的进程信息,从至少一个java进程中确定系统cpu使用率最高的第一目标java进程、实际占用系统内存最高的第二目标java进程和磁盘i/o利用率最高的第三目标java进程;对于第一目标java进程,据所述第一目标java进程包括的至少一个第一线程的线程信息,从至少一个第一线程中,确定系统cpu使用率最高的第一目标线程;对于第二目标java进程,据所述第二目标java进程包括的至少一个第二线程的线程信息,从至少一个第二线程中,确定实际占用系统内存最高的第二目标线程;对于第三目标java进程,据所述第三目标java进程包括的至少一个第三线程的线程信息,从至少一个第三线程中,确定磁盘i/o利用率最高的第三目标线程。

本实施例的装置,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

图5为本发明实施例提供的java应用程序性能问题定位的装置实施例二的结构示意图,如图5所示,本实施例的装置在图4所示装置结构的基础上,进一步地,还可以包括:运行信息获取模块44和死锁信息获取模块45,运行信息获取模块44用于对于每个目标java进程,获取所述目标java进程对应的java应用程序运行过程中的实际配置参数信息、内存分配信息、内存堆信息、内存回收统计信息和内存对象统计信息。死锁信息获取模块45用于对于每个java进程,获取所述java进程的死锁信息。

问题定位文件获取模块43具体用于,根据所有java文件的名称、与相应java文件对应的行号、所有目标java进程的所述实际配置参数信息、内存分配信息、内存堆信息、内存回收统计信息、内存对象统计信息和所有java进程的死锁信息,得到问题定位文件。

其中,所述实际配置参数信息用于用户判断所述java应用程序在启动时的多个配置参数是否与相应的预设配置参数相同,所述内存分配信息和内存堆信息用于用户判断所述java应用程序的内存分配相关参数的配置是否合理,所述内存回收统计信息用于用户判断所述java应用程序垃圾回收参数的配置是否合理,所述内存对象统计信息用于指示用户判断包括占用内存最高的存活对象的程序语句是否为问题程序语句;在死锁信息不为空的情况下,所述死锁信息用于指示用户判断相应java应用程序中包括所述死锁信息中的对象的程序语句是否为问题程序语句。

本实施例的装置,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

图6为本发明实施例提供的java应用程序性能问题定位的装置实施例三的结构示意图,如图6所示,本实施例的装置在图5所示装置结构的基础上,进一步地,还可以包括系统信息获取模块46:系统信息获取模块46用于根据用户输入的问题定位指令,获取系统信息;对于每个目标系统资源,根据系统信息中指示的所有java进程消耗所述目标系统资源的程度,确定所述目标系统资源影响java应用程序性能的级别;其中,所述目标系统资源影响java应用程序性能的级别用于指示所述问题定位文件中的各信息在所述问题定位文件中存储位置和存储方式。

本实施例的装置,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,在所述计算机程序被处理器执行时,执行上述任一方法实施例中的方法。

图7为本申请提供的电子设备的示意图;参见图7,本实施例的电子设备包括处理器71、存储器72和通信接口73,处理器71、存储器72和通信接口73之间通过通信总线74连接,其中,

存储器72用于存储程序指令;

处理器71用于读取所述存储器中的程序指令,并根据存储器72中的程序指令执行上述任一方法实施例中的方法。

通信接口73用于电子设备与外界设备的通信。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1