CN113220554B - 检测程序代码的性能的方法和设备 - Google Patents

检测程序代码的性能的方法和设备 Download PDF

Info

Publication number
CN113220554B
CN113220554B CN202110537186.4A CN202110537186A CN113220554B CN 113220554 B CN113220554 B CN 113220554B CN 202110537186 A CN202110537186 A CN 202110537186A CN 113220554 B CN113220554 B CN 113220554B
Authority
CN
China
Prior art keywords
program code
performance
memory
detecting
program
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
Application number
CN202110537186.4A
Other languages
English (en)
Other versions
CN113220554A (zh
Inventor
孟晨
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN202110537186.4A priority Critical patent/CN113220554B/zh
Publication of CN113220554A publication Critical patent/CN113220554A/zh
Application granted granted Critical
Publication of CN113220554B publication Critical patent/CN113220554B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/3476Data logging

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本公开公开了计算机技术领域,具体地,涉及计算机程序的性能测试技术,更具体地,涉及一种检测程序代码的性能的方法和设备。根据本公开的检测程序代码的性能的方法包括:在运行待测的程序代码的同时,检测所述程序代码的性能指标;对所述性能指标进行处理以得到处理结果;以及使所述处理结果可视化。根据本公开示例实施例的检测程序代码的性能的方法和设备能够检测程序代码本身的性能,从而使得在多个场景下均能及时检测程序代码的性能,并且能够从程序代码自身的角度出发实现对程序代码的优化。

Description

检测程序代码的性能的方法和设备
技术领域
本公开涉及计算机技术领域,具体地,涉及计算机程序的性能测试技术,更具体地,涉及一种检测程序代码的性能的方法和设备。
背景技术
随着计算机技术的发展和进步,开发了各种各样的程序。然而,在程序的开发过程中,由于开发人员往往无法及时知晓在程序运行时的性能状态,因此可能导致在后期出现问题时定位问题成本高且复现问题困难,进而导致无法及时解决问题。
因此,需要一种检测程序代码的性能的方法和设备,其能够及时检测程序代码的性能,而不管程序是否处于开发阶段、测试阶段还是使用阶段。
发明内容
本公开提供了一种用于检测程序代码的性能的方法、设备以及存储介质。
根据本公开的一方面,提供了一种检测程序代码的性能的方法,包括:
在运行待测的程序代码的同时,检测所述程序代码的性能指标;
对所述性能指标进行处理以得到处理结果;以及
使所述处理结果可视化。
根据本公开的另一方面,提供了一种检测程序代码的性能的设备,包括:
性能检测模块,被配置为:在运行待测的程序代码的同时,检测所述程序代码的性能指标;
处理模块,被配置为:对所述性能指标进行处理以得到处理结果;以及
可视化模块,被配置为:使所述处理结果可视化。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是根据本公开示例实施例的用于检测程序代码的性能的方法的流程图;
图2是根据本公开示例实施例的用于检测程序代码的内存占用空间的方法的流程图;
图3是根据本公开示例实施例的用于检测程序代码的内存泄露次数的方法的流程图;
图4是根据本公开示例实施例的用于检测程序代码的程序卡顿次数的方法的流程图;
图5是根据本公开示例实施例的用于检测程序代码的性能的方法的框架图;
图6示出了根据本公开示例实施例的用于使多个性能处理结果可视化的界面示意图;
图7是根据本公开示例实施例的用于检测程序代码的性能的电子设备的框图;以及
图8是用来实现本公开实施例的电子设备的另一示例的框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本公开示例实施例的用于检测程序代码的性能的方法100的流程图。
如图1所示,根据本公开示例实施例的用于检测程序代码的性能的方法100可以包括步骤S110至步骤S130。
在步骤S110,在运行待测的程序代码的同时,检测所述程序代码的性能指标。在一个示例中,性能指标可以包括能够直接反应程序代码的性能的直接性能指标,直接性能指标例如可以是内存占用空间、内存泄露次数、程序卡顿次数等。此外,在另一示例中,性能指标还可以附加地包括例如通过客户端的运行情况来间接反映程序代码的性能的间接性能指标,例如,间接性能指标可以是CPU占用情况、帧速率、网络上行/下行速率等中的至少一个。
在步骤S120,对所述性能指标进行处理以得到处理结果。在检测到性能指标后,可以通过对检测到的性能指标进行处理,来获得将要用于显示的处理结果。例如,对于不同的性能指标,执行的处理可以是不同的。
在步骤S130,使所述处理结果可视化。例如,可以通过显示模块来显示处理结果。例如,显示模块可以显示包括多个条目的界面,其中在多个条目下分别显示与多个性能指标相对应的多个处理结果的详情。此外,显示模块还可以响应于选择了多个条目中的一个条目,显示与被选择的条目相对应的处理结果的详情。
以上描述了一种检测程序代码的性能的方法。通过检测所述程序代码的性能指标,例如,通过检测所述程序代码的直接性能指标,使得根据本公开示例实施例的检测方法能够检测程序代码本身的性能。基于此,根据本公开示例实施例的检测方法可以被广泛地应用于多个场景,从而使得在多个场景下都能够及时检测程序代码的性能,并且能够从程序代码自身的角度出发实现对程序代码的优化。
图2和图3示出了将本公开示例实施例的方法分别用于检测程序代码的内存占用空间和内存泄露次数的示例。当性能指标包括内存泄露次数和内存占用空间中的至少一个时,程序代码可以包括针对对象的初始化和释放模块。在这种情况下,用于检测程序代码的性能的方法还可以包括:通过使用钩子Hook替换法,在程序代码中***针对初始化和释放模块的检测节点;并经由检测节点,检测程序代码的内存泄露次数或内存占用空间中的至少一个。
Hook函数是一种由应用程序定义的回调函数,用于监控***或某一特定类型的事件。在本公开的示例实施例中,通过向对象的初始化和释放模块应用Hook函数来监控对象的初始化事件和释放事件,可以实现监控程序代码本身的内存占用空间和统计程序代码本身的内存泄露次数的目的。
图2是根据本公开示例实施例的用于检测程序代码的内存占用空间的方法200的流程图。
当将根据本公开示例实施例的检测方法用于检测内存占用空间时,如上所述,方法200可以包括:在步骤S201,通过使用钩子Hook替换法,在待检测的程序代码中***针对初始化和释放模块的检测节点。在向程序代码的初始化和释放模块***Hook函数之后,检测节点就可以得知针对对象的初始化命令和释放命令。
接着,在步骤S211,可以创建用于管理对象的哈希表(或称为内存管理表),其中所述哈希表可以响应于所述检测节点接收到对象的初始化命令而对所述对象执行初始化并将其存储在所创建的哈希表中,或者响应于所述检测节点接收到针对对象的释放命令而从所创建的哈希表中删除所述对象。
然后,在步骤S212,在要检测内存占用空间时,可以通过遍历在所述哈希表中存储的对象,来检测每个对象的大小。
在步骤S220,通过对检测到的每个对象的大小求和,来计算所述程序代码的内存占用空间。例如,可以通过统计在某个时刻下哈希表中存储的每个对象的大小的总和,来统计所述程序代码在所述时刻的内存占用空间。
在步骤S230,执行可视化处理,以便使内存占用空间的处理结果可视化。例如,可以经由显示模块显示内存占用空间随时间变化的曲线,从而方便用户和/或开发人员了解在程序代码的运行期间程序代码所占用的内存占用情况。
以上参考图2描述了用于检测程序代码的内存占用空间的方法。如上所述,通过使用Hook函数将检测节点***程序代码的初始化和释放模块,并通过创建自己的内存管理表,在不干扰对象的初始化和释放流程的前提下能够及时检测待测的程序代码本身的内存占用情况,以发现程序代码本身的内存异常,从而实现对内存占用的优化。
图3是根据本公开示例实施例的用于检测程序代码的内存泄露次数的方法300的流程图。
当将根据本公开示例实施例的方法用于检测内存占用空间时,首先,如上所述,所述方法300可以包括:在步骤S301,通过使用钩子Hook替换法,在待检测的程序代码中***针对初始和释放模块的检测节点。步骤S301与步骤S201相似,因此将不再进行赘述。
接着,在步骤S311,响应于所述检测节点接收到用于释放所述程序代码中第一对象的指示,开始计时并在经过预定时段之后向所述第一对象发送消息。在一个示例中,预定时间可以是0.3秒。此外,可以通过设置定时器来执行所述操作。例如,该定时器可以被配置为响应于检测节点接收到针对对象A的释放指示而开始计时,并在经过例如0.3s的预定时间之后触发消息发送单元向对象A发送消息。所述消息发送单元可以设置在定时器中或设置在定时器外部。
然后,在步骤S312,可以确定是否接收到对所发送的消息被成功接收加以指示的应答。也就是说,如果出现了内存泄露,即,在经过预定时间之后对象A还没有被释放,那么这意味着在步骤S311中发送的消息将被对象A成功接收。因此,当确定接收到对所述消息被成功接收加以指示的应答时(步骤S312-是),该方法进行到步骤S313,即,确定出现内存泄露。在这种情况下,对检测到的性能指标进行处理以得到处理结果可以包括:使所述内存泄露次数递增,如步骤S320所示。在步骤S330,对处理结果进行可视化,即,显示递增后的内存泄露次数。
此外,如果确定没有接收到对所述消息被成功接收加以指示的应答(步骤S312-否),则该方法进行到操作S314。在操作S314,确定并未出现内存泄露的情况。因此,可以保持显示上次累积的内存泄露次数,即,以上次累积的内存泄露次数执行可视化。
以上参考图3描述了用于检测程序代码的内存泄露次数的方法。如上所述,通过使用Hook函数将检测节点***程序代码的初始化和释放模块,并通过延迟预定时间后向要释放对象发送消息,能够及时检测待测的程序代码本身的内存泄露情况,从而实现对程序代码本身的内存泄露方面的优化。
图4是根据本公开示例实施例的用于检测程序代码的程序卡顿次数的方法400的流程图。
当所述性能指标包括程序卡顿次数时,用于检测程序代码的程序卡顿次数的方法400可以包括步骤S411至步骤S430。
例如,在步骤S411中,可以检测所述程序代码中的主运行循环从第一状态切换到第二状态的时间差。主运行循环往往运行在主线程上,并用于处理事件并处理基于视图的界面更新。主运行循环响应于事件的发生,而控制程序进入随眠状态或唤醒状态。根据本公开示例实施例,可以通过检测程序从睡眠状态切换到唤醒状态的时间差或从唤醒状态切换到睡眠状态的时间差,来检测程序是否发生卡顿。
在步骤S412,确定检测到的时间差是否大于预定时间。响应于确定所述时间差大于预定时间差(步骤S412-是),该方法进行到步骤S413。在步骤S413,确定出现程序卡顿。在这种情况下,对所述性能指标进行处理以得到处理结果包括:使所述程序卡顿次数递增,如步骤S420。接着,在步骤S430,对处理结果进行可视化处理,即,显示递增后的程序卡顿次数。例如,在iOS***的应用程序中,由主运行循环执行对事件的监控和分发处理,因此,可以通过监控主运行循环的各个事件触发节点来检测程序事件的卡顿。例如,当运行循环持续超过例如0.3s后才进入睡眠状态或者唤醒状态时,可以认为发生程序发生事件卡顿。
此外,如果确定时间差并未大于预定时间差(步骤S412-否),则该方法进行到操作S414。在操作S414,确定并未出现程序卡顿的情况。因此,可以保持显示上次累积的程序卡顿次数,即,以上次累积的程序卡顿次数执行可视化。
以上参考图4描述了用于检测程序代码的程序卡顿次数的方法。如上所述,通过监控由主运行循环控制待测程序从第一状态切换到第二状态的时间差,能够检测由程序代码本身引起的程序卡顿,从而实现对程序卡顿的优化。
图5是根据本公开示例实施例的用于检测程序代码的性能的方法的框架图。
如图5所示,根据本公开示例实施例的用于检测程序代码的性能的方法可以适用于检测程序代码的内存占用空间511、内存泄露次数512、程序卡顿次数513、CPU占用情况514、帧速率FPS 515和网络上/下行速率516等。
当性能指标是内存占用空间511时,程序代码具有原有对象初始化模块511_1和原有对象释放模块511_2。通过使用Hook替换法***检测节点,然后监控原有对象初始化模块511_1和原有对象释放模块511_2。例如,响应于检测节点接收到对象初始化命令,经由对象原有初始化流程对对象进行初始化并将对象***自建的内存管理表,例如啥希表,以对对象进行管理,如附图标记521_1和附图标记521_2所示。响应于检测节点接收到释放对象命令,从自建的内存管理表中移除该对象并通过对象原有释放流程释放该对象,如附图标记521_3和附图标记521_4所示。
当性能指标是内存泄露次数512时,通过延时发送消息来检测是否存在内存泄露,如附图标记522所示。即,通过设置定时器并在经过预定时间之后向对象发送消息来确定该对象是否已被释放。
当性能指标是程序卡顿次数513时,通过监控主运行循环事件节点来检测是否存在程序卡顿,如附图标记523所示。即,通过检测主运行循环从一个状态切换到另一状态的时间,例如,从睡眠态切换到待机态,来确定该程序代码是否卡顿。
以上描述的用于检测程序代码的内存占用空间、内存泄露次数和程序卡顿次数的方法分别与参考图2至图4描述的方法相同,因此,在此将不再进行赘述。
除了检测直接性能指标之外,本公开示例实施例的方法还可以用于检测例如CPU占用情况514、帧速率FPS 515和网络上/下行速率516的间接性能指标。
当性能指标是CPU占用情况514时,可以通过监控CPU的使用情况来确定运行程序所占用的CPU,使得能够在CPU占用过高时直接找出相关业务,并对其进行针对性的优化。
当性能指标时帧速率FPS时,可以设置帧定时器。在一个示例中,可以检测帧定时器两次回调之间的时间差Δt,并通过对该时间差Δt求倒数来计算得到FPS值。此外,也可以通过FPS值来反映程序页面滑动的卡顿。在页面滑动顺畅的情况下,帧定时器通常每秒回调60次。基于此先验知识,如果计算得到的FPS值在55-60之间,则认为页面滑动流畅;如果计算得到的FPS值介于50-55,则认为发生轻微丢帧且滑动产生轻微卡顿;如果计算得到的FPS值低于50fps则认为发生了明显的丢帧且页面滑动产生严重卡顿。此时,可以针对界面滑动流畅度进行针对性优化。
当性能指标是网络上/下行速率时,可以通过统计经由网络每秒发送/接收的数据包的大小来计算网络上/下行速率。例如,可以设置间隔为1s的定时器,并通过统计在1s的间隔内的WIFI、3G、4G、5G、GPRS数据包上传与下载的数量,来计算相应网络上的上/下行速率,从而及时发现由于网络问题造成的业务功能异常。
在检测到相应的性能指标并对其进行处理之后,可以对处理结果进行可视化输出,如附图标记530所示。
以上参考图5描述了用于检测程序代码的多个性能参数的框架图。本领域技术人员应清楚,尽管以上以检测内存占用空间、内存泄露次数、程序卡顿次数、CPU占用情况、帧速率FPS和网络上/下行速率等性能指标为例描述了检测程序代码的性能的方法,然而,根据本公开示例实施例的检测程序代码的性能的方法不限于检测上述性能指标,其还可以被应用于检测其他性能指标,而不脱离本公开的范围。
图6示出了根据本公开示例实施例的用于使多个性能处理结果可视化的界面示意图。
在本公开的示例实施例中,用于使所述处理结果可视化的操作可以包括:显示与多个性能指标相对应的多个条目;以及响应于所述多个条目之一被选择,显示与所选择的条目相对应的处理结果。
例如,使处理结果可视化的操作可以包括:显示包括所述多个条目611至616的界面,如图6所示,其中每个条目对应于一个性能指标。
在一个示例中,响应于选择多个条目611至616中的与内存占用空间相对应的条目611,可以显示与内存占用空间相对应的处理结果的详情。在另一示例中,响应于选择多个条目611至616中的与内存泄露次数相对应的条目612,可以显示与内存泄露次数相对应的处理结果的详情。在又一示例中,响应于选择多个条目611至616中的与程序卡顿次数相对应的条目616,可以显示与程序卡顿次数相对应的处理结果的详情。
以上结合图6详细地示出了对多个性能指标的处理结果进行可视化的过程。
图7是根据本公开示例实施例的用于检测程序代码的性能的电子设备的框图。
所述电子设备700可以包括:性能检测模块710、处理模块720和可视化模块730。例如,性能检测模块710可以被配置为:在运行待测的程序代码的同时,检测所述程序代码的性能指标。如上所述,所述性能指标可以包括例如内存占用空间、内存泄露次数、程序卡顿次数等的直接性能指标以及例如CPU占用情况、帧速率、网络上行/下行速率等的间接性能指标。处理模块720可以被配置为:对所述性能指标进行处理以得到处理结果。处理模块720可以针对不同的性能指标执行不同的处理。可视化模块730被配置为:使所述处理结果可视化。可以通过显示模块来显示处理结果。
当所述性能指标包括内存泄露次数和内存占用空间中的至少一个时,所述程序代码包括针对对象的初始化和释放模块。在这种情况下,所述性能检测模块710还可以被配置为:通过使用钩子Hook替换法,在所述程序代码中***针对所述初始化和释放模块的检测节点;以及经由所述检测节点,检测所述程序代码的内存泄露次数或内存占用空间中的至少一个。
例如,当所述性能指标包括内存占用空间时,所述性能检测模块710可以被配置为:创建用于管理对象的哈希表,其中所述哈希表响应于所述检测节点接收到所述对象的初始化指示或释放指示而存储或删除所述对象;以及通过遍历在所述哈希表中存储的对象,来检测每个对象的大小。此外,所述处理模块720配置为:通过将每个对象的大小求和,来计算所述程序代码的内存占用空间。
当所述性能指标包括内存泄露次数时,所述性能检测模块710可以被配置为:响应于所述检测节点接收到用于释放所述程序代码中第一对象的指示,开始计时并在经过预定时段之后向所述第一对象发送消息;以及当接收到对所述消息被成功接收加以指示的应答时,确定出现内存泄露。在这种情况下,处理模块720可以被配置为:使内存泄露次数递增。
当所述性能指标包括程序卡顿次数时,性能检测模块710可以被配置为:检测所述程序代码中的主运行循环从第一状态切换到第二状态的时间差;以及当所述时间差大于预定时间差时,确定出现程序卡顿。处理模块720可以被配置为:使所述程序卡顿次数递增。
此外,所述可视化模块730可以被配置为:显示与多个性能指标相对应的多个条目;以及响应于所述多个条目之一被选择,显示与所选择的条目相对应的处理结果。
以上描述了一种检测程序代码的性能的设备,通过检测所述程序代码的性能指标,例如,通过检测所述程序代码的直接性能指标,使得根据本公开示例实施例的检测设备能够检测程序代码本身的性能。基于此,根据本公开示例实施例的检测设备可以被广泛地应用于多个场景,从而使得在多个场景下都能够及时检测程序代码的性能,并且能够从程序代码自身的角度出发实现对程序代码的优化。
本公开的技术方案中,所涉及的用户个人信息的获取、存储和应用等均符合相关法律法规的规定,且不违背公序良俗。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图8示出了可以用来实施本公开的实施例的示例电子设备800的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图8所示,设备800包括计算单元801,其可以根据存储在只读存储器(ROM)802中的计算机程序或者从存储单元808加载到随机访问存储器(RAM)803中的计算机程序,来执行各种适当的动作和处理。在RAM 803中,还可存储设备800操作所需的各种程序和数据。计算单元801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
设备800中的多个部件连接至I/O接口805,包括:输入单元806,例如键盘、鼠标等;输出单元807,例如各种类型的显示器、扬声器等;存储单元808,例如磁盘、光盘等;以及通信单元809,例如网卡、调制解调器、无线通信收发机等。通信单元809允许设备800通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元801可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元801的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元801执行上文所描述的各个方法和步骤,例如,如图1至图6所示的方法和步骤。例如,在一些实施例中,图1至图6所示的方法和步骤可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元808。在一些实施例中,计算机程序的部分或者全部可以经由ROM 802和/或通信单元809而被载入和/或安装到设备800上。当计算机程序加载到RAM 803并由计算单元801执行时,可以执行上文描述的用于检测程序代码的性能的方法的一个或多个步骤。备选地,在其他实施例中,计算单元801可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行如上所述的用于检测程序代码的性能的方法和步骤。
本文中以上描述的***和技术的各种实施方式可以在数字电子电路***、集成电路***、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上***的***(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程***上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储***、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储***、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行***、装置或设备使用或与指令执行***、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体***、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的***和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的***和技术实施在包括后台部件的计算***(例如,作为数据服务器)、或者包括中间件部件的计算***(例如,应用服务器)、或者包括前端部件的计算***(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的***和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算***中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将***的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机***可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

Claims (10)

1.一种检测程序代码的性能的方法,包括:
在运行待测的程序代码的同时,检测所述程序代码的性能指标;
对所述性能指标进行处理以得到处理结果;以及
使所述处理结果可视化,
其中,所述性能指标包括内存泄露次数和内存占用空间中的至少一个,所述程序代码包括针对对象的初始化和释放模块;
所述方法还包括:
通过使用钩子Hook替换法,在所述程序代码中***针对所述初始化和释放模块的检测节点;
经由所述检测节点,检测所述程序代码的内存泄露次数或内存占用空间中的至少一个,
其中,所述检测所述程序代码的内存泄露次数或内存占用空间中的至少一个包括:
响应于所述检测节点接收到用于释放所述程序代码中第一对象的指示,开始计时并在经过预定时段之后向所述第一对象发送消息;以及
当接收到对所述消息被成功接收加以指示的应答时,确定出现内存泄露,以及
其中,所述对所述性能指标进行处理以得到处理结果包括:使所述内存泄露次数递增。
2.根据权利要求1所述的方法,其中,所述检测所述程序代码的内存泄露次数或内存占用空间中的至少一个包括:
创建用于管理对象的哈希表,其中所述哈希表响应于所述检测节点接收到所述对象的初始化指示或释放指示而存储或删除所述对象;以及
通过遍历在所述哈希表中存储的对象,来检测每个对象的大小,以及
其中,所述对所述性能指标进行处理以得到处理结果包括:通过将每个对象的大小求和,来计算所述程序代码的内存占用空间。
3.根据权利要求1所述的方法,其中,所述性能指标包括程序卡顿次数,以及
其中,所述检测所述程序代码的性能指标包括:
检测所述程序代码中的主运行循环从第一状态切换到第二状态的时间差;以及
当所述时间差大于预定时间差时,确定出现程序卡顿,以及
其中,所述对所述性能指标进行处理以得到处理结果包括:使所述程序卡顿次数递增。
4.根据权利要求1至3中的任一项所述的方法,其中使所述处理结果可视化包括:
显示与多个性能指标相对应的多个条目;以及
响应于所述多个条目之一被选择,显示与所选择的条目相对应的处理结果。
5.一种检测程序代码的性能的设备,包括:
性能检测模块,被配置为:在运行待测的程序代码的同时,检测所述程序代码的性能指标;
处理模块,被配置为:对所述性能指标进行处理以得到处理结果;以及
可视化模块,被配置为:使所述处理结果可视化,
其中,所述性能指标包括内存泄露次数和内存占用空间中的至少一个,且所述程序代码包括针对对象的初始化和释放模块;
所述性能检测模块还被配置为:
通过使用钩子Hook替换法,在所述程序代码中***针对所述初始化和释放模块的检测节点;
经由所述检测节点,检测所述程序代码的内存泄露次数或内存占用空间中的至少一个,
其中,所述性能检测模块被配置为:
响应于所述检测节点接收到用于释放所述程序代码中第一对象的指示,开始计时并在经过预定时段之后向所述第一对象发送消息;以及
当接收到对所述消息被成功接收加以指示的应答时,确定出现内存泄露,以及
其中,所述处理模块被配置为:使所述内存泄露次数递增。
6.根据权利要求5所述的设备,其中,所述性能检测模块被配置为:
创建用于管理对象的哈希表,其中所述哈希表响应于所述检测节点接收到所述对象的初始化指示或释放指示而存储或删除所述对象;以及
通过遍历在所述哈希表中存储的对象,来检测每个对象的大小,以及
其中,所述处理模块配置为:通过将每个对象的大小求和,来计算所述程序代码的内存占用空间。
7.根据权利要求5所述的设备,其中,所述性能指标包括程序卡顿次数,以及
其中,所述性能检测模块被配置为:
检测所述程序代码中的主运行循环从第一状态切换到第二状态的时间差;以及
当所述时间差大于预定时间差时,确定出现程序卡顿,以及
其中,所述处理模块被配置为:使所述程序卡顿次数递增。
8.根据权利要求5至7中的任一项所述的设备,其中,所述可视化模块被配置为:
显示与多个性能指标相对应的多个条目;以及
响应于所述多个条目之一被选择,显示与所选择的条目相对应的处理结果。
9.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-4中任一项所述的方法。
10.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1-4中任一项所述的方法。
CN202110537186.4A 2021-05-17 2021-05-17 检测程序代码的性能的方法和设备 Active CN113220554B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110537186.4A CN113220554B (zh) 2021-05-17 2021-05-17 检测程序代码的性能的方法和设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110537186.4A CN113220554B (zh) 2021-05-17 2021-05-17 检测程序代码的性能的方法和设备

Publications (2)

Publication Number Publication Date
CN113220554A CN113220554A (zh) 2021-08-06
CN113220554B true CN113220554B (zh) 2023-07-25

Family

ID=77092676

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110537186.4A Active CN113220554B (zh) 2021-05-17 2021-05-17 检测程序代码的性能的方法和设备

Country Status (1)

Country Link
CN (1) CN113220554B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114356311A (zh) * 2022-01-07 2022-04-15 北京字节跳动网络技术有限公司 代码性能数据的交互方法、装置、介质及电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5432932A (en) * 1992-10-23 1995-07-11 International Business Machines Corporation System and method for dynamically controlling remote processes from a performance monitor
CN102831068A (zh) * 2011-06-13 2012-12-19 阿里巴巴集团控股有限公司 一种内存操作记录的处理方法及装置
CN106557424A (zh) * 2016-11-18 2017-04-05 腾讯科技(深圳)有限公司 内存测试方法、被测终端、测试客户端及***
CN110334031A (zh) * 2019-07-16 2019-10-15 腾讯科技(深圳)有限公司 内存分配代码检测方法、装置、计算机设备及存储介质
CN111966603A (zh) * 2020-09-04 2020-11-20 网易(杭州)网络有限公司 内存泄露的检测方法及装置、可读存储介质及电子设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5432932A (en) * 1992-10-23 1995-07-11 International Business Machines Corporation System and method for dynamically controlling remote processes from a performance monitor
CN102831068A (zh) * 2011-06-13 2012-12-19 阿里巴巴集团控股有限公司 一种内存操作记录的处理方法及装置
CN106557424A (zh) * 2016-11-18 2017-04-05 腾讯科技(深圳)有限公司 内存测试方法、被测终端、测试客户端及***
CN110334031A (zh) * 2019-07-16 2019-10-15 腾讯科技(深圳)有限公司 内存分配代码检测方法、装置、计算机设备及存储介质
CN111966603A (zh) * 2020-09-04 2020-11-20 网易(杭州)网络有限公司 内存泄露的检测方法及装置、可读存储介质及电子设备

Also Published As

Publication number Publication date
CN113220554A (zh) 2021-08-06

Similar Documents

Publication Publication Date Title
CN114328098B (zh) 一种慢节点检测方法、装置、电子设备及存储介质
CN105589772A (zh) 检测fpga芯片逻辑挂死的方法和装置
CN113220554B (zh) 检测程序代码的性能的方法和设备
CN113468021B (zh) 监控性能数据的方法、装置、设备以及存储介质
CN110209548B (zh) 服务控制方法、***、电子设备及计算机可读存储介质
CN113190427A (zh) 卡顿监控方法、装置、电子设备及存储介质
CN116594563A (zh) 分布式存储扩容方法、装置、电子设备和存储介质
CN115421859B (zh) 配置文件的动态加载方法、装置、计算机设备及存储介质
CN110795239A (zh) 应用内存泄露的检测方法及装置
CN115543416A (zh) 一种配置更新方法、装置、电子设备及存储介质
CN113676531B (zh) 电商流量削峰方法、装置、电子设备及可读存储介质
CN115390993A (zh) 一种虚拟机内存处理方法、装置、电子设备和存储介质
CN117395263B (zh) 一种数据同步方法、装置、设备和存储介质
CN116016265B (zh) 消息全链路监控方法、装置、***、设备和存储介质
CN115757031A (zh) 一种应用进程的处理方法、装置、设备及介质
CN116225151A (zh) 一种基于时钟总线的数据处理***和方法
CN117632348A (zh) 一种dpu的热迁移方法、装置、存储介质及电子设备
CN116089222A (zh) 一种数据库集群监控方法、装置、设备及介质
CN116633881A (zh) 一种带宽的控制方法、装置、设备及介质
CN117234779A (zh) 一种分布式数据库的异常恢复方法、装置、设备及介质
CN115878086A (zh) 一种应用程序的运行处理方法、装置、设备及存储介质
CN118175193A (zh) 一种连接切换方法、装置、服务器及存储介质
CN115454310A (zh) 一种数据的页面交互方法、装置、设备及介质
CN116881296A (zh) 缓存数据的监控管理方法、装置、设备及存储介质
CN117290179A (zh) 一种事件超时状态的确定方法、装置、设备和存储介质

Legal Events

Date Code Title Description
PB01 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