计算机运行监测方法、装置和系统与流程

文档序号:12271156阅读:207来源:国知局
计算机运行监测方法、装置和系统与流程

本发明涉及到计算机技术领域,特别涉及到计算机运行监测方法、装置和系统。



背景技术:

目前,智能终端已经成为广大用户生活中必不可少的设备之一。人们在最求终端的功能多样性的同时,对终端的响应速度的要求也越来越高。当终端响应速度较慢时,会造成终端界面停滞的现象,影响用户正常使用。为了查找影响响应速度、造成运行响应迟滞现象的原因,终端内部通常会对系统进行监控,初步定位造成运行响应迟滞的代码来源。现有的计算机运行监测方法通常是在主线程代码中标记时间点,在遇到运行响应迟滞时,从代码中获取迟滞时间段对应的代码,来定位造成运行响应迟滞的代码来源。但是现有方法需要到主线程代码中查找与迟滞时间段匹配的时间标记点,代码量多,查找起来非常不方便,无法做到快速精确定位。



技术实现要素:

本发明实施例提供一种计算机运行监测方法、装置和系统,能够快速精确定位造成运行响应迟滞的代码来源。

本发明实施例提出一种计算机运行监测方法,包括步骤:

终端通过子线程定期获取主线程代码堆栈信息和CPU运行负载信息;

在主线程中执行指令消息时,在执行前后分别标记时间点,并根据标记的时间点计算所述指令消息对应的代码堆栈的执行时长;

当所述执行时长大于时间阈值时,查找子线程在所述第一时间点至第二时间点之间获取的代码堆栈信息和CPU运行负载信息,并录入日志文件中;

将所述日志文件上报至服务器。

本发明实施例还提出一种计算机运行监测方法,包括步骤:

终端通过子线程定期获取主线程代码堆栈信息和CPU运行负载信息;

所述终端在主线程中执行指令消息时,在执行前后分别标记时间点,并根据标记的时间点计算所述指令消息对应的代码堆栈的执行时长;

当所述执行时长大于时间阈值时,所述终端查找子线程在所述第一时间点至第二时间点之间获取的代码堆栈信息和CPU运行负载信息,并录入日志文件中,上报至服务器;

所述服务器接收各终端上报的日志文件,并统计各日志文件中的每一个代码堆栈信息出现的次数;

当所述代码堆栈信息出现的次数大于次数阈值时,所述服务器将次数大于次数阈值的代码堆栈信息确定为造成运行响应迟滞的代码来源,并返回统计结果给所述终端。

本发明实施例还提出一种计算机运行监测装置,包括:

子线程获取模块,用于通过子线程定期获取主线程代码堆栈信息和CPU运行负载信息;

时间标记模块,用于在主线程中执行指令消息时,在执行前后分别标记时间点;

时长计算模块,用于根据标记的时间点计算所述指令消息对应的代码堆栈的执行时长;

比较模块,用于判断所述执行时长是否大于时间阈值;

子线程查找模块,用于当所述执行时长大于时间阈值时,查找子线程在所述第一时间点至第二时间点之间获取的代码堆栈信息和CPU运行负载信息,并录入日志文件中;

上报模块,用于将所述日志文件上报至服务器。

本发明实施例还提出一种计算机运行监测系统,包括终端和服务器:

所述终端用于:

通过子线程定期获取主线程代码堆栈信息和CPU运行负载信息;

在主线程中执行指令消息时,在执行前后分别标记时间点,并根据标记 的时间点计算所述指令消息对应的代码堆栈的执行时长;

当所述执行时长大于时间阈值时,查找子线程在所述第一时间点至第二时间点之间获取的代码堆栈信息和CPU运行负载信息,并录入日志文件中,上报至服务器;

所述服务器用于:

接收各终端上报的日志文件,并统计各日志文件中的每一个代码堆栈信息出现的次数;

当所述代码堆栈信息出现的次数大于次数阈值时,将次数大于次数阈值的代码堆栈信息确定为造成运行响应迟滞的代码来源,并返回统计结果给所述终端。

本发明实施例采用子线程定期获取主线程的代码堆栈信息,并将获取的信息与获取时间关联,在主线程执行指令消息时,当执行时长大于时间阈值时,将该指令消息执行时间段中子线程获取的代码堆栈信息提取出来,记录到日志文件中,如此一来,从日志文件中能一目了然的查看到造成运行响应迟滞的代码堆栈信息,实现了快速精确定位造成运行响应迟滞的代码来源。

附图说明

图1为本发明实施例中计算机运行监测装置所在终端的总线图;

图2为本发明终端实现计算机运行监测方法的第一实施例的流程图;

图3为本发明终端实现计算机运行监测方法的第二实施例的流程图;

图4为本发明终端实现计算机运行监测方法的第三实施例的流程图;

图5为本发明终端和服务器实现计算机运行监测方法的第一实施例的流程图;

图6为本发明终端和服务器实现计算机运行监测方法的第二实施例的流程图;

图7为本发明终端和服务器实现计算机运行监测方法的第三实施例的流程图;

图8为本发明计算机运行监测装置的第一实施例的模块示意图;

图9为本发明计算机运行监测装置的第二实施例的模块示意图;

图10为本发明计算机运行监测系统实施例的运行环境图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

参照图1,图1为本发明实施例中计算机运行监测装置所在终端的总线图。该终端可以包括:至少一个处理器101,例如CPU,至少一个网络接口104,用户接口103,存储器105,至少一个通信总线102。其中,通信总线102用于实现这些组件之间的连接通信。其中,用户接口103可以包括显示屏(Display)、键盘(Keyboard),还可以包括标准的有线接口、无线接口。网络接口104可以包括标准的有线接口、无线接口(如WIFI接口)。存储器105可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器105还可以是至少一个位于远离前述处理器101的存储装置和系统。作为一种计算机存储介质的存储器105中可以包括操作系统、网络通信模块、用户接口模块以及计算机运行监测程序。

在图2所示的计算机运行监测装置所在终端中,网络接口104主要用于连接服务器或其他终端,与服务器或其他终端进行数据通信;而用户接口103主要用于接收用户指令,并与用户进行交互;而处理器101可以用于调用存储器105中存储的计算机运行监测程序,并执行以下操作:

通过子线程定期获取主线程代码堆栈信息和CPU运行负载信息;

在主线程中执行指令消息时,在执行前后分别标记时间点,并根据标记的时间点计算指令消息对应的代码堆栈的执行时长;

当执行时长大于时间阈值时,查找子线程在第一时间点至第二时间点之间获取的代码堆栈信息和CPU运行负载信息,并录入日志文件中;

通过网络接口104将日志文件上报至服务器。

在一个实施例中,处理器101调用存储器105中存储的计算机运行监测程 序还可以执行以下操作:

在主线程中,当指令消息到达时,在日志文件中标记第一时间点;

在执行完成指令消息对应的代码堆栈后,在日志文件中标记第二时间点;

根据第一时间点和第二时间点计算时长,作为指令消息对应的代码堆栈的执行时长。

在一个实施例中,处理器101调用存储器105中存储的计算机运行监测程序还可以执行以下操作:

当日志文件中的代码堆栈信息在日志文件中重复出现,且重复次数大于次数阈值时,将重复次数大于次数阈值的代码堆栈信息确定为造成运行响应迟滞的代码来源。

本实施例图1所描述的计算机运行监测装置及其所在终端,采用子线程定期获取主线程的代码堆栈信息,并将获取的信息与获取时间关联,在主线程执行指令消息时,当执行时长大于时间阈值时,将该指令消息执行时间段中子线程获取的代码堆栈信息提取出来,记录到日志文件中,如此一来,从日志文件中能一目了然的查看到造成运行响应迟滞的代码堆栈信息,实现了快速精确定位造成运行响应迟滞的代码来源。

如图2所示,图2为本发明终端实现计算机运行监测方法的第一实施例的流程图。本实施例提到的计算机运行监测方法,包括:

步骤S110,终端通过子线程定期获取主线程代码堆栈信息和CPU运行负载信息;

本实施例的终端在运行过程中,单独用一个子线程定时去获取当前时刻主线程执行的代码堆栈信息和CPU运行负载信息,并将获取的信息保存起来。保存的主线程代码堆栈信息和CPU运行负载信息需与信息获取的时间相关联,可在保存信息时将获取时间与获取的信息对应存储。

步骤S120,在主线程中执行指令消息时,在执行前后分别标记时间点,并根据标记的时间点计算指令消息对应的代码堆栈的执行时长;

当用户在终端上进行操作时,例如滑动屏幕、调大音量、打开应用、下载网络资源等,都会产生指令消息。在一指令消息生成后,主线程会调用对应的代码执行该指令消息。在执行前后,分别在日志中标记执行前的时间点 和执行后的时间点,两个标记的时间点之差即为执行该指令消息对应的代码堆栈的时长。

步骤S130,当执行时长大于时间阈值时,查找子线程在第一时间点至第二时间点之间获取的代码堆栈信息和CPU运行负载信息,并录入日志文件中;

在计算出执行某一指令消息所消耗的时长后,将该时长与预设的时间阈值进行比较,例如将时间阈值设为3000毫秒,如果该时长大于该时间阈值,则说明执行该指令消息耗时较长,存在运行响应迟滞。为了查找造成运行响应迟滞的代码来源,从子线程中查找。由于子线程在定时获取主线程的代码堆栈,并且获取的代码堆栈与获取时间关联存储,因此可以根据某一指令消息的执行前时间点和执行后时间点来确定一个时间段,并从子线程获取的信息中查找该时间段内获取的代码堆栈信息和CPU运行负载信息。将该时间段内子线程获取的信息保存到日志中,方便一目了然的查看到日志中的造成运行响应迟滞的代码。

步骤S140,将日志文件上报至服务器。

为了向服务器获取提高运行响应速度的解决方案,终端可将记录有造成运行响应迟滞的代码信息的日志文件上传到服务器,服务器根据日志文件中的信息查找提高运行响应速度的解决方案,并返回给终端。此外,终端记录在日志文件中的信息也可不立即确定为造成运行响应迟滞的代码来源,而是作为疑似造成运行响应迟滞的代码上传给服务器,服务器对各个终端上传的日志文件中的信息进行统计,统计出各日志文件中的每一个代码堆栈信息重复出现的次数,如果次数过多,再将其作为造成运行响应迟滞的代码来源,并告知终端。另外,服务器还可以统计同一代码堆栈信息出现次数相对于总的使用量的占比,或同一终端出现疑似运行响应迟滞的次数相对于该终端已处理消息的总次数的占比等信息,或对造成运行响应迟滞的代码堆栈排序,根据上述统计的结果,制定出合适的解决方案,返回给终端。

本实施例采用子线程定期获取主线程的代码堆栈信息,并将获取的信息与获取时间关联,在主线程执行指令消息时,当执行时长大于时间阈值时,将该指令消息执行时间段中子线程获取的代码堆栈信息提取出来,记录到日志文件中,如此一来,从日志文件中能一目了然的查看到造成运行响应迟滞的代码堆栈信息,实现了快速精确定位造成运行响应迟滞的代码来源。

如图3所示,图3为本发明终端实现计算机运行监测方法的第二实施例的流程图。本实施例包括图2所示实施例的步骤,步骤S120包括:

步骤S121,在主线程中,当指令消息到达时,在日志文件中标记第一时间点;

步骤S122,在执行完成指令消息对应的代码堆栈后,在日志文件中标记第二时间点;

步骤S123,根据第一时间点和第二时间点计算时长,作为指令消息对应的代码堆栈的执行时长。

本实施例终端在主线程代码中切入一标记时间点代码。当用户在终端上进行操作时,生成指令消息,在某一指令消息生成后,主线程调用对应的代码执行该指令消息,同时,主线程还调用该标记时间点代码在日志文件中标记第一时间点,即执行前时间点。执行完该指令消息后,主线程再次调用该标记时间点代码在日志文件中标记第二时间点,即执行后时间点。第一时间点至第二时间点的时长就是执行该指令消息的时长。例如,在源码Looper.loop中,通过代码Looper.get Main Looper().set Message Logging(logging)传入logging变量,在logging.println中进行时间打点,完成dispatch Message(msg)后,根据标记的时间点计算出dispatch Message(msg)消息执行的耗时,即执行时长。

本实施例通过在主线程中插入标记时间点代码,将指令消息执行前后时间点标记到日志文件中,方便于快速获得执行一指令消息所消耗的时长,进而有利于快速定位耗时过长的造成运行响应迟滞的代码,提高计算机运行监测效率。

如图4所示,图4为本发明终端实现计算机运行监测方法的第三实施例的流程图。本实施例包括图2所示实施例的步骤,步骤S130之后还包括:

步骤S150,当日志文件中的代码堆栈信息在日志文件中重复出现,且重复次数大于次数阈值时,将重复次数大于次数阈值的代码堆栈信息确定为造成运行响应迟滞的代码来源。

本实施例的终端记录在日志文件中的信息可不立即确定为造成运行响应 迟滞的代码来源,而是作为疑似造成运行响应迟滞的代码。对于偶发性耗时增大的代码堆栈信息,可不列为造成运行响应迟滞的代码。因此可对记录到日志文件中的代码堆栈信息的重复性进行筛选,当某一个代码堆栈信息在终端的日志文件中多次重复出现时,且重复次数已经超过了预设的次数阈值,则认为该代码堆栈信息并不是偶发性的耗时过长,而是持续性的,则将该代码堆栈信息确定为造成运行响应迟滞的代码来源。如此一来,有利于避免将偶发耗时增大的代码堆栈信息作为造成运行响应迟滞的代码,使定位迟滞代码更加精确。

如图5所示,图5为本发明终端和服务器实现计算机运行监测方法的第一实施例的流程图。本实施例提到的计算机运行监测方法,包括:

步骤S210,终端通过子线程定期获取主线程代码堆栈信息和CPU运行负载信息;

本实施例的终端在运行过程中,单独用一个子线程定时去获取当前时刻主线程执行的代码堆栈信息和CPU运行负载信息,并将获取的信息保存起来。保存的主线程代码堆栈信息和CPU运行负载信息需与信息获取的时间相关联,可在保存信息时将获取时间与获取的信息对应存储。

步骤S220,终端在主线程中执行指令消息时,在执行前后分别标记时间点,并根据标记的时间点计算指令消息对应的代码堆栈的执行时长;

当用户在终端上进行操作时,例如滑动屏幕、调大音量、打开应用、下载网络资源等,都会产生指令消息。在一指令消息生成后,主线程会调用对应的代码执行该指令消息。在执行前后,分别在日志中标记执行前的时间点和执行后的时间点,两个标记的时间点之差即为执行该指令消息对应的代码堆栈的时长。

步骤S230,当执行时长大于时间阈值时,终端查找子线程在第一时间点至第二时间点之间获取的代码堆栈信息和CPU运行负载信息,并录入日志文件中;

在计算出执行某一指令消息所消耗的时长后,将该时长与预设的时间阈值进行比较,例如将时间阈值设为3000毫秒,如果该时长大于该时间阈值,则说明执行该指令消息耗时较长,存在运行响应迟滞。为了查找造成运行响 应迟滞的代码来源,从子线程中查找。由于子线程在定时获取主线程的代码堆栈,并且获取的代码堆栈与获取时间关联存储,因此可以根据某一指令消息的执行前时间点和执行后时间点来确定一个时间段,并从子线程获取的信息中查找该时间段内获取的代码堆栈信息和CPU运行负载信息。将该时间段内子线程获取的信息保存到日志中,方便一目了然的查看到日志中的造成运行响应迟滞的代码。

步骤S240,终端上报日志文件至服务器;

步骤S250,服务器接收各终端上报的日志文件,并统计各日志文件中的每一个代码堆栈信息出现的次数;

为了向服务器获取提高运行响应速度的解决方案,终端可将记录有造成运行响应迟滞的代码信息的日志文件上传到服务器,服务器根据日志文件中的信息查找提高运行响应速度的解决方案,并返回给终端。此外,终端记录在日志文件中的信息也可不立即确定为造成运行响应迟滞的代码来源,而是作为疑似造成运行响应迟滞的代码上传给服务器,服务器对各个终端上传的日志文件中的信息进行统计,统计出各日志文件中的每一个代码堆栈信息重复出现的次数。

步骤S260,当代码堆栈信息出现的次数大于次数阈值时,服务器将次数大于次数阈值的代码堆栈信息确定为造成运行响应迟滞的代码来源,并返回统计结果给终端。

如果次数过多,再将其作为造成运行响应迟滞的代码来源,并告知终端。另外,服务器还可以统计同一代码堆栈信息出现次数相对于总的使用量的占比,或同一终端出现疑似运行响应迟滞的次数相对于该终端已处理消息的总次数的占比等信息,或对造成运行响应迟滞的代码堆栈排序,根据上述统计的结果,制定出合适的解决方案,返回给终端。

本实施例采用子线程定期获取主线程的代码堆栈信息,并将获取的信息与获取时间关联,在主线程执行指令消息时,当执行时长大于时间阈值时,将该指令消息执行时间段中子线程获取的代码堆栈信息提取出来,记录到日志文件中,如此一来,从日志文件中能一目了然的查看到造成运行响应迟滞的代码堆栈信息,实现了快速精确定位造成运行响应迟滞的代码来源。同时,服务器对终端上报的日志文件中各代码堆栈信息的重复次数进行统计,将重 复次数大于次数阈值的代码堆栈信息确定为造成运行响应迟滞的代码来源,避免了将偶发耗时增大的代码堆栈信息作为造成运行响应迟滞的代码,使定位迟滞代码更加精确。

如图6所示,图6为本发明终端和服务器实现计算机运行监测方法的第二实施例的流程图。本实施例包括图5所示实施例的步骤,步骤S220包括:

步骤S221,在主线程中,当指令消息到达时,终端在日志文件中标记第一时间点;

步骤S222,终端在执行完成指令消息对应的代码堆栈后,在日志文件中标记第二时间点;

步骤S223,终端根据第一时间点和第二时间点计算时长,作为指令消息对应的代码堆栈的执行时长。

本实施例终端在主线程代码中切入一标记时间点代码。当用户在终端上进行操作时,生成指令消息,在某一指令消息生成后,主线程调用对应的代码执行该指令消息,同时,主线程还调用该标记时间点代码在日志文件中标记第一时间点,即执行前时间点。执行完该指令消息后,主线程再次调用该标记时间点代码在日志文件中标记第二时间点,即执行后时间点。第一时间点至第二时间点的时长就是执行该指令消息的时长。例如,在源码Looper.loop中,通过代码Looper.get Main Looper().set Message Logging(logging)传入logging变量,在logging.println中进行时间打点,完成dispatch Message(msg)后,根据标记的时间点计算出dispatch Message(msg)消息执行的耗时,即执行时长。

本实施例通过在主线程中插入标记时间点代码,将指令消息执行前后时间点标记到日志文件中,方便于快速获得执行一指令消息所消耗的时长,进而有利于快速定位耗时过长的造成运行响应迟滞的代码,提高计算机运行监测效率。

如图7所示,图7为本发明终端和服务器实现计算机运行监测方法的第三实施例的流程图。本实施例包括图5所示实施例的步骤,步骤S230之后还包括:

步骤S270,当日志文件中的代码堆栈信息在日志文件中重复出现,且重复次数大于次数阈值时,终端将重复次数大于次数阈值的代码堆栈信息确定为造成运行响应迟滞的代码来源。

本实施例的终端记录在日志文件中的信息可不立即确定为造成运行响应迟滞的代码来源,而是作为疑似造成运行响应迟滞的代码。对于偶发性耗时增大的代码堆栈信息,可不列为造成运行响应迟滞的代码。因此可对记录到日志文件中的代码堆栈信息的重复性进行筛选,当某一个代码堆栈信息在终端的日志文件中多次重复出现时,且重复次数已经超过了预设的次数阈值,则认为该代码堆栈信息并不是偶发性的耗时过长,而是持续性的,则将该代码堆栈信息确定为造成运行响应迟滞的代码来源。如此一来,有利于避免将偶发耗时增大的代码堆栈信息作为造成运行响应迟滞的代码,使定位迟滞代码更加精确。

如图8所示,图8为本发明计算机运行监测装置的第一实施例的模块示意图。本实施例提到的计算机运行监测装置,包括:

子线程获取模块110,用于通过子线程定期获取主线程代码堆栈信息和CPU运行负载信息;

时间标记模块120,用于在主线程中执行指令消息时,在执行前后分别标记时间点;

时长计算模块130,用于根据标记的时间点计算指令消息对应的代码堆栈的执行时长;

比较模块140,用于判断执行时长是否大于时间阈值;

子线程查找模块150,用于当执行时长大于时间阈值时,查找子线程在第一时间点至第二时间点之间获取的代码堆栈信息和CPU运行负载信息,并录入日志文件中;

上报模块160,用于将日志文件上报至服务器。

本实施例的计算机运行监测装置设于终端中。终端在运行过程中,单独用一个子线程定时去获取当前时刻主线程执行的代码堆栈信息和CPU运行负载信息,并将获取的信息保存起来。保存的主线程代码堆栈信息和CPU运行负载信息需与信息获取的时间相关联,可在保存信息时将获取时间与获取的 信息对应存储。

当用户在终端上进行操作时,例如滑动屏幕、调大音量、打开应用、下载网络资源等,都会产生指令消息。在一指令消息生成后,主线程会调用对应的代码执行该指令消息。在执行前后,分别在日志中标记执行前的时间点和执行后的时间点,两个标记的时间点之差即为执行该指令消息对应的代码堆栈的时长。

在计算出执行某一指令消息所消耗的时长后,将该时长与预设的时间阈值进行比较,例如将时间阈值设为3000毫秒,如果该时长大于该时间阈值,则说明执行该指令消息耗时较长,存在运行响应迟滞。为了查找造成运行响应迟滞的代码来源,从子线程中查找。由于子线程在定时获取主线程的代码堆栈,并且获取的代码堆栈与获取时间关联存储,因此可以根据某一指令消息的执行前时间点和执行后时间点来确定一个时间段,并从子线程获取的信息中查找该时间段内获取的代码堆栈信息和CPU运行负载信息。将该时间段内子线程获取的信息保存到日志中,方便一目了然的查看到日志中的造成运行响应迟滞的代码。

为了向服务器获取提高运行响应速度的解决方案,终端可将记录有造成运行响应迟滞的代码信息的日志文件上传到服务器,服务器根据日志文件中的信息查找提高运行响应速度的解决方案,并返回给终端。此外,终端记录在日志文件中的信息也可不立即确定为造成运行响应迟滞的代码来源,而是作为疑似造成运行响应迟滞的代码上传给服务器,服务器对各个终端上传的日志文件中的信息进行统计,统计出各日志文件中的每一个代码堆栈信息重复出现的次数,如果次数过多,再将其作为造成运行响应迟滞的代码来源,并告知终端。另外,服务器还可以统计同一代码堆栈信息出现次数相对于总的使用量的占比,或同一终端出现疑似运行响应迟滞的次数相对于该终端已处理消息的总次数的占比等信息,或对造成运行响应迟滞的代码堆栈排序,根据上述统计的结果,制定出合适的解决方案,返回给终端。

本实施例采用子线程定期获取主线程的代码堆栈信息,并将获取的信息与获取时间关联,在主线程执行指令消息时,当执行时长大于时间阈值时,将该指令消息执行时间段中子线程获取的代码堆栈信息提取出来,记录到日志文件中,如此一来,从日志文件中能一目了然的查看到造成运行响应迟滞 的代码堆栈信息,实现了快速精确定位造成运行响应迟滞的代码来源。

进一步的,时间标记模块120还用于,在主线程中,当指令消息到达时,在日志文件中标记第一时间点;在执行完成指令消息对应的代码堆栈后,在日志文件中标记第二时间点;

时长计算模块130还用于,根据第一时间点和第二时间点计算时长,作为指令消息对应的代码堆栈的执行时长。

本实施例终端在主线程代码中切入一标记时间点代码。当用户在终端上进行操作时,生成指令消息,在某一指令消息生成后,主线程调用对应的代码执行该指令消息,同时,主线程还调用该标记时间点代码在日志文件中标记第一时间点,即执行前时间点。执行完该指令消息后,主线程再次调用该标记时间点代码在日志文件中标记第二时间点,即执行后时间点。第一时间点至第二时间点的时长就是执行该指令消息的时长。例如,在源码Looper.loop中,通过代码Looper.get Main Looper().set Message Logging(logging)传入logging变量,在logging.println中进行时间打点,完成dispatch Message(msg)后,根据标记的时间点计算出dispatch Message(msg)消息执行的耗时,即执行时长。

本实施例通过在主线程中插入标记时间点代码,将指令消息执行前后时间点标记到日志文件中,方便于快速获得执行一指令消息所消耗的时长,进而有利于快速定位耗时过长的造成运行响应迟滞的代码,提高计算机运行监测效率。

如图9所示,图9为本发明计算机运行监测装置的第二实施例的模块示意图。本实施例包括图8所示实施例的模块,还包括来源确定模块170,用于当日志文件中的代码堆栈信息在日志文件中重复出现,且重复次数大于次数阈值时,将重复次数大于次数阈值的代码堆栈信息确定为造成运行响应迟滞的代码来源。

本实施例的终端记录在日志文件中的信息可不立即确定为造成运行响应迟滞的代码来源,而是作为疑似造成运行响应迟滞的代码。对于偶发性耗时增大的代码堆栈信息,可不列为造成运行响应迟滞的代码。因此可对记录到 日志文件中的代码堆栈信息的重复性进行筛选,当某一个代码堆栈信息在终端的日志文件中多次重复出现时,且重复次数已经超过了预设的次数阈值,则认为该代码堆栈信息并不是偶发性的耗时过长,而是持续性的,则将该代码堆栈信息确定为造成运行响应迟滞的代码来源。如此一来,有利于避免将偶发耗时增大的代码堆栈信息作为造成运行响应迟滞的代码,使定位迟滞代码更加精确。

如图10所示,图10为本发明计算机运行监测系统实施例的运行环境图。本实施例提到的计算机运行监测系统,包括终端100和服务器200:

终端100用于:

通过子线程定期获取主线程代码堆栈信息和CPU运行负载信息;

在主线程中执行指令消息时,在执行前后分别标记时间点,并根据标记的时间点计算指令消息对应的代码堆栈的执行时长;

当执行时长大于时间阈值时,查找子线程在第一时间点至第二时间点之间获取的代码堆栈信息和CPU运行负载信息,并录入日志文件中,上报至服务器200;

服务器200用于:

接收各终端100上报的日志文件,并统计各日志文件中的每一个代码堆栈信息出现的次数;

当代码堆栈信息出现的次数大于次数阈值时,将次数大于次数阈值的代码堆栈信息确定为造成运行响应迟滞的代码来源,并返回统计结果给终端100。

本实施例的终端在运行过程中,单独用一个子线程定时去获取当前时刻主线程执行的代码堆栈信息和CPU运行负载信息,并将获取的信息保存起来。保存的主线程代码堆栈信息和CPU运行负载信息需与信息获取的时间相关联,可在保存信息时将获取时间与获取的信息对应存储。

当用户在终端上进行操作时,例如滑动屏幕、调大音量、打开应用、下载网络资源等,都会产生指令消息。在一指令消息生成后,主线程会调用对应的代码执行该指令消息。在执行前后,分别在日志中标记执行前的时间点和执行后的时间点,两个标记的时间点之差即为执行该指令消息对应的代码 堆栈的时长。

在计算出执行某一指令消息所消耗的时长后,将该时长与预设的时间阈值进行比较,例如将时间阈值设为3000毫秒,如果该时长大于该时间阈值,则说明执行该指令消息耗时较长,存在运行响应迟滞。为了查找造成运行响应迟滞的代码来源,从子线程中查找。由于子线程在定时获取主线程的代码堆栈,并且获取的代码堆栈与获取时间关联存储,因此可以根据某一指令消息的执行前时间点和执行后时间点来确定一个时间段,并从子线程获取的信息中查找该时间段内获取的代码堆栈信息和CPU运行负载信息。将该时间段内子线程获取的信息保存到日志中,方便一目了然的查看到日志中的造成运行响应迟滞的代码。

为了向服务器获取提高运行响应速度的解决方案,终端可将记录有造成运行响应迟滞的代码信息的日志文件上传到服务器,服务器根据日志文件中的信息查找提高运行响应速度的解决方案,并返回给终端。此外,终端记录在日志文件中的信息也可不立即确定为造成运行响应迟滞的代码来源,而是作为疑似造成运行响应迟滞的代码上传给服务器,服务器对各个终端上传的日志文件中的信息进行统计,统计出各日志文件中的每一个代码堆栈信息重复出现的次数。

如果次数过多,再将其作为造成运行响应迟滞的代码来源,并告知终端。另外,服务器还可以统计同一代码堆栈信息出现次数相对于总的使用量的占比,或同一终端出现疑似运行响应迟滞的次数相对于该终端已处理消息的总次数的占比等信息,或对造成运行响应迟滞的代码堆栈排序,根据上述统计的结果,制定出合适的解决方案,返回给终端。

本实施例采用子线程定期获取主线程的代码堆栈信息,并将获取的信息与获取时间关联,在主线程执行指令消息时,当执行时长大于时间阈值时,将该指令消息执行时间段中子线程获取的代码堆栈信息提取出来,记录到日志文件中,如此一来,从日志文件中能一目了然的查看到造成运行响应迟滞的代码堆栈信息,实现了快速精确定位造成运行响应迟滞的代码来源。同时,服务器对终端上报的日志文件中各代码堆栈信息的重复次数进行统计,将重复次数大于次数阈值的代码堆栈信息确定为造成运行响应迟滞的代码来源,避免了将偶发耗时增大的代码堆栈信息作为造成运行响应迟滞的代码,使定 位迟滞代码更加精确。

进一步的,终端100还用于:

在主线程中,当指令消息到达时,在日志文件中标记第一时间点;

在执行完成指令消息对应的代码堆栈后,在日志文件中标记第二时间点;

根据第一时间点和第二时间点计算时长,作为指令消息对应的代码堆栈的执行时长。

本实施例终端在主线程代码中切入一标记时间点代码。当用户在终端上进行操作时,生成指令消息,在某一指令消息生成后,主线程调用对应的代码执行该指令消息,同时,主线程还调用该标记时间点代码在日志文件中标记第一时间点,即执行前时间点。执行完该指令消息后,主线程再次调用该标记时间点代码在日志文件中标记第二时间点,即执行后时间点。第一时间点至第二时间点的时长就是执行该指令消息的时长。例如,在源码Looper.loop中,通过代码Looper.get Main Looper().set Message Logging(logging)传入logging变量,在logging.println中进行时间打点,完成dispatch Message(msg)后,根据标记的时间点计算出dispatch Message(msg)消息执行的耗时,即执行时长。

本实施例通过在主线程中插入标记时间点代码,将指令消息执行前后时间点标记到日志文件中,方便于快速获得执行一指令消息所消耗的时长,进而有利于快速定位耗时过长的造成运行响应迟滞的代码,提高计算机运行监测效率。

进一步的,终端100还用于:

当日志文件中的代码堆栈信息在日志文件中重复出现,且重复次数大于次数阈值时,将重复次数大于次数阈值的代码堆栈信息确定为造成运行响应迟滞的代码来源。

本实施例的终端记录在日志文件中的信息可不立即确定为造成运行响应迟滞的代码来源,而是作为疑似造成运行响应迟滞的代码。对于偶发性耗时增大的代码堆栈信息,可不列为造成运行响应迟滞的代码。因此可对记录到日志文件中的代码堆栈信息的重复性进行筛选,当某一个代码堆栈信息在终 端的日志文件中多次重复出现时,且重复次数已经超过了预设的次数阈值,则认为该代码堆栈信息并不是偶发性的耗时过长,而是持续性的,则将该代码堆栈信息确定为造成运行响应迟滞的代码来源。如此一来,有利于避免将偶发耗时增大的代码堆栈信息作为造成运行响应迟滞的代码,使定位迟滞代码更加精确。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置和系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置和系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置和系统中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

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