一种进程监控方法和装置的制造方法

文档序号:8223394阅读:165来源:国知局
一种进程监控方法和装置的制造方法
【技术领域】
[0001]本发明涉及计算机技术领域,特别是涉及一种进程监控方法和装置。
【背景技术】
[0002]在Linux、Unix等操作系统中通常运行有多个进程。目前,在进程出现运行时间长、运行错误等问题时,需要通过监控进程来分析问题的原因。
[0003]现有方案可以将strace和pstack工具结合起来使用,直接用来找到影响进程运行时间的函数调用,再有针对地对相关函数进行代码分析和优化。其中,strace工具可以跟踪进程使用的底层系统调用,可输出系统调用被执行的时间点以及各个调用的耗时;pstack工具可以对指定PID(进程ID,Process Identity)的进程输出函数调用栈。
[0004]PHP (超文本处理器,Hypertext Preprocessor)脚本是一种由PHP解释器来执行的进程,然而现有strace和pstack仅仅能够提供PHP解释器的系统调用信息,而无法提供PHP脚本的信息,因此,无法满足PHP脚本的分析需求。

【发明内容】

[0005]鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种进程监控方法和装置。
[0006]依据本发明的一个方面,提供了一种进程监控方法,包括:
[0007]将PHP解释器的操作执行函数替换为预置的监控函数;以及
[0008]利用所述监控函数执行所述PHP解释器针对进程编译得到的操作,且利用所述监控函数监控所述操作的执行过程中的函数信息。
[0009]可选地,所述利用所述监控函数监控所述操作的执行过程中的函数信息的步骤进一步包括:
[0010]根据待监控信息对应变量相对预置全局变量的偏移量,获取所述变量的地址;以及
[0011]利用所述监控函数,监控所述变量的地址在所述操作的执行过程中的信息。
[0012]可选地,在所述利用所述监控函数执行所述PHP解释器针对进程编译得到的操作,且利用所述监控函数监控所述操作的执行过程中的函数信息的步骤之前,所述方法还包括:
[0013]通过读取共享内存,判断所述进程对应的监控开关是否开启;
[0014]在所述进程对应的监控开关开启时,利用所述监控函数执行所述PHP解释器针对进程编译得到的操作,且利用所述监控函数监控所述操作的执行过程中的函数信息;
[0015]将所述函数信息写入所述共享内存,由命令行工具从所述共享内存中读取所述函数信息。
[0016]可选地,所述将所述函数信息写入所述共享内存的步骤,包括:
[0017]将所述函数信息写入所述共享内存中所述进程对应的内存映射文件。
[0018]可选地,所述方法还包括:
[0019]利用pstack得到进程对应PHP解释器的调用栈信息;以及
[0020]依据所述PHP解释器的全局成员变量,在所述PHP解释器的调用栈信息中查找所述PHP解释器执行的各操作对应的函数调用栈信息。
[0021 ] 可选地,所述依据所述PHP解释器的全局变量,在所述PHP解释器的调用栈信息中查找所述PHP解释器执行的各操作对应的函数调用栈信息的步骤进一步包括:
[0022]依据PHP解释器的操作执行的上下文环境,得到所述PHP解释器执行的当前操作的操作执行信息;以及
[0023]依据所述PHP解释器的全局变量和所述当前操作的操作执行信息,在所述PHP解释器的调用栈信息中查找所述PHP解释器执行的当前操作对应的函数调用栈信息。
[0024]可选地,所述监控开关的开启和关闭由所述命令行工具控制。
[0025]依据本发明的另一方面,提供了一种进程监控装置,包括:
[0026]替换模块,用于将PHP解释器的操作执行函数替换为预置的监控函数;以及
[0027]监控模块,用于利用所述监控函数执行所述PHP解释器针对进程编译得到的操作,且利用所述监控函数监控所述操作的执行过程中的函数信息。
[0028]可选地,所述监控模块,进一步包括:
[0029]地址获取子模块,用于根据待监控信息对应变量相对预置全局变量的偏移量,获取所述变量的地址;以及
[0030]监控子模块,用于利用所述监控函数,监控所述变量的地址在所述操作的执行过程中的信息。
[0031]可选地,所述装置还包括:
[0032]判断模块,用于在所述利用所述监控函数执行所述PHP解释器针对进程编译得到的操作,且利用所述监控函数监控所述操作的执行过程中的函数信息的操作之前,通过读取共享内存,判断所述进程对应的监控开关是否开启;
[0033]则所述监控模块,具体用于在所述进程对应的监控开关开启时,利用所述监控函数执行所述PHP解释器针对进程编译得到的操作,且利用所述监控函数监控所述操作的执行过程中的函数信息;
[0034]则所述装置还包括:
[0035]写入模块,用于将所述函数信息写入所述共享内存,由命令行工具从所述共享内存中读取所述函数信息。
[0036]可选地,所述写入模块,具体用于将所述函数信息写入所述共享内存中所述进程对应的内存映射文件。
[0037]可选地,所述装置还包括:
[0038]栈信息获取模块,用于利用pstack得到进程对应PHP解释器的调用栈信息;以及
[0039]查找模块,用于依据所述PHP解释器的全局成员变量,在所述PHP解释器的调用栈信息中查找所述PHP解释器执行的各操作对应的函数调用栈信息。
[0040]可选地,所述查找模块,进一步包括:
[0041 ] 操作获取子模块,用于依据PHP解释器的操作执行的上下文环境,得到所述PHP解释器执行的当前操作的操作执行信息;以及
[0042]操作查找子模块,用于依据所述PHP解释器的全局变量和所述当前操作的操作执行信息,在所述PHP解释器的调用栈信息中查找所述PHP解释器执行的当前操作对应的函数调用栈信息。
[0043]可选地,所述监控开关的开启和关闭由所述命令行工具控制。
[0044]根据本发明实施例的一种进程监控方法和装置,可以将PHP解释器的操作执行函数替换为预置的监控函数,并利用所述监控函数执行所述PHP解释器针对进程编译得到的操作,且利用所述监控函数监控所述操作的执行过程中的函数信息,这里的函数信息可以为PHP函数在执行过程中的所有函数信息,如函数名、函数参数、行号、文件名等信息,并且,还可以在函数执行完成后获取函数返回值、函数调用时间等信息,这样,可以实时获取操作的执行过程中的函数信息并进行输出,因此,能够方便PHP脚本的开发人员快速定位PHP脚本的问题。
[0045]上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的【具体实施方式】。
【附图说明】
[0046]通过阅读下文可选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出可选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0047]图1示出了根据本发明一个实施例的一种进程监控方法的步骤流程示意图;
[0048]图2示出了根据本发明一个实施例的一种进程监控方法的步骤流程示意图;
[0049]图3示出了根据本发明一个实施例的一种进程监控系统的结构示意图;
[0050]图4示出了根据本发明一个实施例的一种进程监控方法的步骤流程示意图;以及
[0051]图5示出了根据本发明一个实施例的一种进程监控装置的结构示意图。
【具体实施方式】
[0052]下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0053]参照图1,示出了根据本发明一个实施例的一种进程监控方法的步骤流程示意图,具体可以包括如下步骤:
[0054]步骤101、将PHP解释器的操作执行函数替换为预置的监控函数;以及
[0055]步骤102、利用所述监控函数执行所述PHP解释器针对进程编译得到的操作,且利用所述监控函数监控所述操作的执行过程中的函数信息。
[0056]PHP脚本在PHP解释器中一般会经过词法解析、语法解析、编译生成中间代码和执行中间代码等步骤;其中,默认情况下执行中间代码的步骤是通过zend/zend_vm_execute, h文件中的zend_execute函数调用执行完成,对于所有的中间代码,默认实现是以按顺序执行,当遇到函数等情况时跳出去执行,执行完后再回到跳出的位置继续执行。
[0057]本发明实施例的核心构思之一在于,将PHP解释器的zend_execute、zend_execute等操作执行函数替换为预置的监控函数,并利用所述监控函数执行所述PHP解释器针对进程编译得到的操作,且利用所述监控函数监控所述操作(op,operat1n)的执行过程中的函数信息,这里的函数信息可以为PHP函数在执行过程
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1