CN106445769B - 计算机运行监测方法、装置和系统 - Google Patents
计算机运行监测方法、装置和系统 Download PDFInfo
- Publication number
- CN106445769B CN106445769B CN201510490674.9A CN201510490674A CN106445769B CN 106445769 B CN106445769 B CN 106445769B CN 201510490674 A CN201510490674 A CN 201510490674A CN 106445769 B CN106445769 B CN 106445769B
- Authority
- CN
- China
- Prior art keywords
- information
- code
- time point
- time
- code stack
- 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.)
- Active
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种计算机运行监测方法,包括步骤:终端通过子线程定期获取主线程代码堆栈信息和CPU运行负载信息;在主线程中执行指令消息时,在执行前后分别标记时间点,并根据标记的时间点计算指令消息对应的代码堆栈的执行时长;当执行时长大于时间阈值时,查找子线程在第一时间点至第二时间点之间获取的代码堆栈信息和CPU运行负载信息,并录入日志文件中;将日志文件上报至服务器。本发明还公开了一种计算机运行监测装置和系统。本发明在主线程执行指令消息的时长过大时,提取执行时间段中子线程获取的代码堆栈信息并记录到日志文件中,从日志文件中能一目了然的查看到造成迟滞的代码堆栈信息,实现了快速精确定位迟滞代码来源。
Description
技术领域
本发明涉及到计算机技术领域,特别涉及到计算机运行监测方法、装置和系统。
背景技术
目前,智能终端已经成为广大用户生活中必不可少的设备之一。人们在追求终端的功能多样性的同时,对终端的响应速度的要求也越来越高。当终端响应速度较慢时,会造成终端界面停滞的现象,影响用户正常使用。为了查找影响响应速度、造成运行响应迟滞现象的原因,终端内部通常会对系统进行监控,初步定位造成运行响应迟滞的代码来源。现有的计算机运行监测方法通常是在主线程代码中标记时间点,在遇到运行响应迟滞时,从代码中获取迟滞时间段对应的代码,来定位造成运行响应迟滞的代码来源。但是现有方法需要到主线程代码中查找与迟滞时间段匹配的时间标记点,代码量多,查找起来非常不方便,无法做到快速精确定位。
发明内容
本发明实施例提供一种计算机运行监测方法、装置和系统,能够快速精确定位造成运行响应迟滞的代码来源。
本发明实施例提出一种计算机运行监测方法,包括步骤:
终端通过子线程定期获取主线程代码堆栈信息和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、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (7)
1.一种计算机运行监测方法,其特征在于,包括步骤:
终端通过子线程定期获取主线程代码堆栈信息和CPU运行负载信息,并将子线程获取的信息与相应的获取时间进行关联存储;
在主线程中执行指令消息时,在执行前后分别标记第一时间点和第二时间点,并根据标记的第一时间点和第二时间点计算所述指令消息对应的代码堆栈的执行时长;
当所述执行时长大于时间阈值时,根据所述关联存储查找子线程在所述第一时间点至第二时间点之间获取的代码堆栈信息和CPU运行负载信息,并录入日志文件中;
将所述日志文件中的信息作为疑似造成终端运行响应迟滞的代码上报至服务器,以使所述服务器统计各终端上报的日志文件中的每一个代码堆栈信息出现的次数;以及当所述代码堆栈信息出现的次数大于次数阈值时,将次数大于次数阈值的代码堆栈信息确定为造成终端运行响应迟滞的代码来源;
接收所述服务器返回的统计结果。
2.如权利要求1所述的计算机运行监测方法,其特征在于,所述在主线程中执行指令消息时,在执行前后分别标记第一时间点和第二时间点,并根据标记的第一时间点和第二时间点计算所述指令消息对应的代码堆栈的执行时长的步骤包括:
在主线程中,当指令消息到达时,在日志文件中标记第一时间点;
在执行完成所述指令消息对应的代码堆栈后,在日志文件中标记第二时间点;
根据所述第一时间点和第二时间点计算时长,作为所述指令消息对应的代码堆栈的执行时长。
3.一种计算机运行监测方法,其特征在于,包括步骤:
服务器接收各终端上报的日志文件,并统计各日志文件中的每一个代码堆栈信息出现的次数;所述日志文件中的信息为疑似造成终端运行响应迟滞的代码,所述日志文件中的信息包括所述终端在执行时长大于时间阈值时,根据关联存储查找子线程在第一时间点至第二时间点之间获取的代码堆栈信息和CPU运行负载信息;所述第一时间点和所述第二时间点为所述终端在主线程中执行指令消息时,在执行前后分别标记的时间点;所述执行时长为所述指令消息对应的代码堆栈的执行时长,其根据标记的所述第一时间点和所述第二时间点计算得到;所述关联存储表征所述终端通过子线程定期获取到的信息与相应的获取时间之间的关联关系,所述子线程定期获取到的信息包括主线程代码堆栈信息和CPU运行负载信息;
当所述代码堆栈信息出现的次数大于次数阈值时,所述服务器将次数大于次数阈值的代码堆栈信息确定为造成运行响应迟滞的代码来源,并返回统计结果给所述终端。
4.一种计算机运行监测装置,其特征在于,包括:
子线程获取模块,用于通过子线程定期获取主线程代码堆栈信息和CPU运行负载信息,并将子线程获取的信息与相应的获取时间进行关联存储;
时间标记模块,用于在主线程中执行指令消息时,在执行前后分别标记第一时间点和第二时间点;
时长计算模块,用于根据标记的第一时间点和第二时间点计算所述指令消息对应的代码堆栈的执行时长;
比较模块,用于判断所述执行时长是否大于时间阈值;
子线程查找模块,用于当所述执行时长大于时间阈值时,根据所述关联存储查找子线程在所述第一时间点至第二时间点之间获取的代码堆栈信息和CPU运行负载信息,并录入日志文件中;
上报模块,用于将所述日志文件中的信息作为疑似造成终端运行响应迟滞的代码上报至服务器,以使所述服务器统计各终端上报的日志文件中的每一个代码堆栈信息出现的次数;以及当所述代码堆栈信息出现的次数大于次数阈值时,将次数大于次数阈值的代码堆栈信息确定为造成终端运行响应迟滞的代码来源;
接收模块,用于接收所述服务器返回的统计结果。
5.如权利要求4所述的计算机运行监测装置,其特征在于,所述时间标记模块还用于,在主线程中,当指令消息到达时,在日志文件中标记第一时间点;在执行完成所述指令消息对应的代码堆栈后,在日志文件中标记第二时间点;
所述时长计算模块还用于,根据所述第一时间点和第二时间点计算时长,作为所述指令消息对应的代码堆栈的执行时长。
6.一种计算机运行监测装置,其特征在于,包括:
日志文件接收模块,用于接收各终端上报的日志文件,并统计各日志文件中的每一个代码堆栈信息出现的次数;所述日志文件中的信息为疑似造成终端运行响应迟滞的代码,所述日志文件中的信息包括所述终端在执行时长大于时间阈值时,根据关联存储查找子线程在第一时间点至第二时间点之间获取的代码堆栈信息和CPU运行负载信息;所述第一时间点和所述第二时间点为所述终端在主线程中执行指令消息时,在执行前后分别标记的时间点;所述执行时长为所述指令消息对应的代码堆栈的执行时长,其根据标记的所述第一时间点和所述第二时间点计算得到;所述关联存储表征所述终端通过子线程定期获取到的信息与相应的获取时间之间的关联关系,所述子线程定期获取到的信息包括主线程代码堆栈信息和CPU运行负载信息;
返回模块,用于当所述代码堆栈信息出现的次数大于次数阈值时,将次数大于次数阈值的代码堆栈信息确定为造成运行响应迟滞的代码来源,并返回统计结果给所述终端。
7.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有程序,所述程序由处理器加载并执行以实现如权利要求1至3任一所述的计算机运行监测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510490674.9A CN106445769B (zh) | 2015-08-11 | 2015-08-11 | 计算机运行监测方法、装置和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510490674.9A CN106445769B (zh) | 2015-08-11 | 2015-08-11 | 计算机运行监测方法、装置和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106445769A CN106445769A (zh) | 2017-02-22 |
CN106445769B true CN106445769B (zh) | 2020-12-15 |
Family
ID=58093594
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510490674.9A Active CN106445769B (zh) | 2015-08-11 | 2015-08-11 | 计算机运行监测方法、装置和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106445769B (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107357703B (zh) * | 2017-06-16 | 2020-09-29 | 奇安信科技集团股份有限公司 | 一种终端应用耗电检测方法及服务器 |
CN107590060A (zh) * | 2017-09-05 | 2018-01-16 | 杭州时趣信息技术有限公司 | 一种终端卡顿的分析方法及装置 |
CN107741897A (zh) * | 2017-09-11 | 2018-02-27 | 广州市百果园信息技术有限公司 | 应用程序流畅度检测方法、装置及智能终端 |
CN107609187A (zh) * | 2017-10-09 | 2018-01-19 | 郑州云海信息技术有限公司 | 一种统计文件系统中异步操作的方法、系统及相关装置 |
CN109840177B (zh) * | 2017-11-24 | 2021-08-24 | 腾讯科技(深圳)有限公司 | 一种卡顿的处理方法及相关设备 |
CN108304310B (zh) * | 2018-02-28 | 2021-04-16 | 厦门美图移动科技有限公司 | 一种日志分析方法及计算设备 |
CN109245935B (zh) * | 2018-09-27 | 2021-07-27 | 福建天泉教育科技有限公司 | 一种消息队列异常的处理方法及终端 |
CN109753406B (zh) * | 2018-12-05 | 2022-06-17 | 平安科技(深圳)有限公司 | 接口的性能监控方法、装置、设备及计算机可读存储介质 |
CN111368104B (zh) * | 2018-12-26 | 2023-05-26 | 阿里巴巴集团控股有限公司 | 信息处理方法、装置及设备 |
CN109739676B (zh) * | 2018-12-27 | 2022-06-24 | 努比亚技术有限公司 | 一种运行监测方法、移动终端及计算机可读存储介质 |
CN109918260A (zh) * | 2019-01-24 | 2019-06-21 | 平安科技(深圳)有限公司 | 一种项目代码的监控方法和装置 |
CN111625370B (zh) * | 2019-02-27 | 2023-10-10 | 杭州海康威视系统技术有限公司 | 一种消息推送方法、装置、电子设备及存储介质 |
CN110618940B (zh) * | 2019-09-19 | 2024-02-06 | 腾讯科技(深圳)有限公司 | 堆栈信息追踪方法、装置、计算机可读介质及计算装置 |
CN113268242A (zh) * | 2020-02-17 | 2021-08-17 | 北京达佳互联信息技术有限公司 | 代码编译时长确定方法、装置、电子设备和存储介质 |
CN113297052B (zh) * | 2020-02-21 | 2024-04-26 | 腾讯科技(深圳)有限公司 | 应用程序的卡顿事件定位方法、装置、存储介质和设备 |
CN111324512A (zh) * | 2020-02-25 | 2020-06-23 | 北京云途腾科技有限责任公司 | 用于生成文本的方法、装置、电子设备和计算机可读介质 |
CN111552613A (zh) * | 2020-04-26 | 2020-08-18 | 北京字节跳动网络技术有限公司 | 线程超时的处理方法、装置以及电子设备 |
CN111897726B (zh) * | 2020-07-27 | 2024-01-19 | Tcl通讯(宁波)有限公司 | 异常定位方法、装置、存储介质及移动终端 |
CN112650647B (zh) * | 2020-12-29 | 2023-10-31 | 北京字节跳动网络技术有限公司 | 一种信息获取方法、装置、设备及介质 |
CN113608982A (zh) * | 2021-07-27 | 2021-11-05 | 远景智能国际私人投资有限公司 | 函数执行性能监测方法、装置、计算机设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661423A (zh) * | 2009-09-01 | 2010-03-03 | 卡斯柯信号有限公司 | 一种多维日志系统 |
US8180884B1 (en) * | 2005-11-30 | 2012-05-15 | At&T Intellectual Property Ii, L.P. | Method and apparatus for monitoring, reporting and charging for services in an application network |
CN103092746A (zh) * | 2013-02-05 | 2013-05-08 | 上海大唐移动通信设备有限公司 | 线程异常的定位方法及系统 |
-
2015
- 2015-08-11 CN CN201510490674.9A patent/CN106445769B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8180884B1 (en) * | 2005-11-30 | 2012-05-15 | At&T Intellectual Property Ii, L.P. | Method and apparatus for monitoring, reporting and charging for services in an application network |
CN101661423A (zh) * | 2009-09-01 | 2010-03-03 | 卡斯柯信号有限公司 | 一种多维日志系统 |
CN103092746A (zh) * | 2013-02-05 | 2013-05-08 | 上海大唐移动通信设备有限公司 | 线程异常的定位方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106445769A (zh) | 2017-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106445769B (zh) | 计算机运行监测方法、装置和系统 | |
EP3480692A1 (en) | Methods and systems for preloading applications and generating prediction models | |
CN108984388B (zh) | 一种生成自动化测试用例的方法及终端设备 | |
CN111294819B (zh) | 一种网络优化方法及装置 | |
CN104899204B (zh) | 数据存储方法及装置 | |
CN109685092B (zh) | 基于大数据的聚类方法、设备、存储介质及装置 | |
CN104181567B (zh) | 终端设备的定位方法、终端设备及终端设备定位系统 | |
CN105183630A (zh) | 应用程序测试方法及装置 | |
CN111026775A (zh) | 关联指标的确定方法、装置、服务器和存储介质 | |
CN107908679B (zh) | 脚本语句转换方法、装置及计算机可读存储介质 | |
CN110597694A (zh) | 一种监控前端页面的方法及终端 | |
CN113542043A (zh) | 网络设备的数据采样方法、装置、设备及介质 | |
CN107182078B (zh) | 分析终端电路域回落测试报告的方法、终端及存储装置 | |
CN108255700B (zh) | 测试结果生成方法和装置 | |
US8922491B2 (en) | Method and apparatus enabling keystroke acceleration | |
CN106708562B (zh) | 通过点击Android的物理按键运行应用程序的方法及系统 | |
CN112583617B (zh) | 故障确定方法、服务器、控制终端及存储介质 | |
CN111241432A (zh) | 用户行为分析方法及装置、计算机可读存储介质 | |
CN112241362A (zh) | 一种测试方法、装置、服务器及存储介质 | |
CN113439252A (zh) | 终端控制方法、装置、存储介质及电子设备 | |
CN111786856A (zh) | 一种浏览器环境检查方法及装置 | |
CN112800303A (zh) | 一种浏览器数据的存储、读取方法及相关装置 | |
CN111178044B (zh) | 一种确定目标文本要素的方法及装置 | |
CN111582736B (zh) | 基于mes系统的数据处理方法、电子装置及存储介质 | |
CN111352947B (zh) | 数据的更新方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |