CN118535238A - 执行函数监控方法、装置、设备及存储介质 - Google Patents

执行函数监控方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN118535238A
CN118535238A CN202410491447.7A CN202410491447A CN118535238A CN 118535238 A CN118535238 A CN 118535238A CN 202410491447 A CN202410491447 A CN 202410491447A CN 118535238 A CN118535238 A CN 118535238A
Authority
CN
China
Prior art keywords
function
monitoring
php
request
execution
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.)
Pending
Application number
CN202410491447.7A
Other languages
English (en)
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.)
Guangzhou Yihu Network Technology Co ltd
Original Assignee
Guangzhou Yihu Network 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 Guangzhou Yihu Network Technology Co ltd filed Critical Guangzhou Yihu Network Technology Co ltd
Priority to CN202410491447.7A priority Critical patent/CN118535238A/zh
Publication of CN118535238A publication Critical patent/CN118535238A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请公开了一种执行函数监控方法、装置、设备及存储介质,涉及计算机技术领域。该方法包括:在进程管理器启动后,将系统关键函数替换为目标关键函数,目标关键函数由监控函数和系统关键函数封装得到;将进程管理器接收到的请求分配至PHP解释器,以通过PHP解释器执行对应的PHP脚本处理请求,PHP脚本包括多个第一函数;在开始执行PHP脚本后,获取第一函数的函数名,将第一函数的函数名与预设的第二函数的函数名进行匹配;在第一函数的函数名与预设的第二函数的函数名相匹配的情况下,调用目标关键函数中的系统关键函数执行第一函数,以及调用目标关键函数中的监控函数获取执行第一函数的监控数据,实现了PHP服务无缝接入全链路监控。

Description

执行函数监控方法、装置、设备及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种执行函数监控方法、装置、设备及存储介质。
背景技术
随着微服务技术的普遍使用,游戏应用的后端业务越发复杂,游戏应用架构由集中式向分布式演进后,整个调用关系也变得复杂。为了确保后端业务的运行稳定性,可对后端业务进行监控,以实时监测后端业务的故障节点,及时维护故障节点。
在现有技术中,后端业务采用了PHP(Hypertext Preprocessor,超文本预处理器)服务,PHP服务为使用PHP语言编写的服务器端应用程序,其可以用于处理来自客户端的请求并返回相应的响应。但PHP服务的监控方式一般是从nginx入口通过lun扩展对站点进行监控,这种监控方式只能监控入口流量,无法对PHP服务的核心函数进行全链路监控,难以对PHP服务的故障节点进行分析追踪和精确定位,无法保证后端业务的稳定性。
发明内容
本申请提供一种执行函数监控方法、装置、设备及存储介质,以通过预先埋好的监控函数获取PHP脚本执行过程中各个核心函数执行的监控数据,在无需修改PHP服务代码的前提下达到PHP服务无缝接入全链路监控的目的,解决了现有技术中无法对PHP服务的核心函数进行全链路监控的技术问题,提高了对故障节点的定位效率,保证了后端业务的稳定性。
第一方面,本申请提供了一种执行函数监控方法,包括:
在进程管理器启动后,将系统关键函数替换为目标关键函数,所述目标关键函数由监控函数和所述系统关键函数封装得到;
将所述进程管理器接收到的请求分配至PHP解释器,以通过所述PHP解释器执行对应的PHP脚本处理所述请求,所述PHP脚本包括多个第一函数;
在开始执行所述PHP脚本后,获取第一函数的函数名,将所述第一函数的函数名与预设的第二函数的函数名进行匹配;
在所述第一函数的函数名与预设的第二函数的函数名相匹配的情况下,调用所述目标关键函数中的系统关键函数执行所述第一函数,以及调用所述目标关键函数中的监控函数获取执行所述第一函数的监控数据。
第二方面,本申请提供了一种执行函数监控装置,包括:
关键函数替换模块,被配置为在进程管理器启动后,将系统关键函数替换为目标关键函数,所述目标关键函数由监控函数和所述系统关键函数封装得到;
请求分配模块,被配置为将所述进程管理器接收到的请求分配至PHP解释器,以通过所述PHP解释器执行对应的PHP脚本处理所述请求,所述PHP脚本包括多个第一函数;
函数名匹配模块,被配置为在开始执行所述PHP脚本后,获取第一函数的函数名,将所述第一函数的函数名与预设的第二函数的函数名进行匹配;
第一监控模块,被配置为在所述第一函数的函数名与预设的第二函数的函数名相匹配的情况下,调用所述目标关键函数中的系统关键函数执行所述第一函数,以及调用所述目标关键函数中的监控函数获取执行所述第一函数的监控数据。
第三方面,本申请提供了一种执行函数监控设备,包括:
一个或多个处理器;
存储器,存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的执行函数监控方法。
第四方面,本申请提供了一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行如第一方面所述的执行函数监控方法。
在本申请中,通过在进程管理器启动后,将系统关键函数替换为目标关键函数,目标关键函数由监控函数和系统关键函数封装得到;将进程管理器接收到的请求分配至PHP解释器,以通过PHP解释器执行对应的PHP脚本处理请求,PHP脚本包括多个第一函数;在开始执行PHP脚本后,获取第一函数的函数名,将第一函数的函数名与预设的第二函数的函数名进行匹配;在第一函数的函数名与预设的第二函数的函数名相匹配的情况下,调用目标关键函数中的系统关键函数执行第一函数,以及调用目标关键函数中的监控函数获取执行第一函数的监控数据。通过上述技术手段,目标关键函数可替换PHP服务中各个函数执行时都会调用的系统关键函数,以埋入用于采集函数执行时的监控数据的监控函数,使得在PHP脚本执行过程中执行到核心函数前调用目标关键函数中的系统关键函数执行核心函数的同时,通过目标关键函数中的监控函数采集核心函数执行时的监控数据,在无需修改PHP服务代码的前提下达到PHP服务无缝接入全链路监控的目的,解决了现有技术中无法对PHP服务的核心函数进行全链路监控的技术问题,提高了对故障节点的定位效率,保证了后端业务的稳定性。
附图说明
图1是本申请实施例提供的一种执行函数监控方法的流程图;
图2是本申请实施例提供的PHP服务运作方式的示意图;
图3是本申请实施例提供的通过前置函数和后置函数获取监控数据的流程图;
图4是本申请实施例提供的通过前置函数和后置函数获取请求数据的流程图;
图5是本申请实施例提供的一种执行函数监控装置的结构示意图;
图6是本申请实施例提供的一种执行函数监控设备的结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面结合附图对本申请具体实施例作进一步的详细描述。可以理解的是,此处所描述的具体实施例仅仅用于解释本申请,而非对本申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请相关的部分而非全部内容。在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时处理可以被终止,但是还可以具有未包括在附图中的附加步骤。处理可以对应于方法、函数、规程、子例程、子程序等等。
本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
在较为常见的现有实现方式中,后端业务采用了PHP(Hypertext Preprocessor,超文本预处理器)服务,PHP服务为使用PHP语言编写的服务器端应用程序,其可以用于处理来自客户端的请求并返回相应的响应。但PHP服务的监控方式一般是从nginx入口通过lun扩展对站点进行监控,这种监控方式只能监控入口流量,无法对PHP服务的核心函数进行全链路监控,难以对PHP服务的故障节点进行分析追踪和精确定位,无法保证后端业务的稳定性。
为解决上述问题,本实施例提供了一种执行函数监控方法,以通过预先埋好的监控函数获取PHP脚本执行过程中各个核心函数执行的监控数据,在无需修改PHP服务代码的前提下达到PHP服务无缝接入全链路监控的目的,提高了对故障节点的定位效率,保证了后端业务的稳定性。
本实施例中提供的执行函数监控方法可以由执行函数监控设备执行,该执行函数监控设备可以通过软件和/或硬件的方式实现,该执行函数监控设备可以是两个或多个物理实体构成,也可以是一个物理实体构成。例如执行函数监控设备可以是采用了PHP服务的后端服务器。
执行函数监控设备安装有至少一类操作系统,其中,操作系统包括但不限定于安卓系统、Linux系统及Windows系统。执行函数监控设备可以基于操作系统安装至少一个应用程序,应用程序可以为操作系统自带的应用程序,也可以为从第三方设备或者服务器中下载的应用程序。在该实施例中,执行函数监控设备至少有可以执行执行函数监控方法的应用程序,例如该应用程序可以是PHP服务本身。
为便于理解,本实施例以后端服务器为执行函数监控方法的执行主体为例进行描述。
图1给出了本申请实施例提供的一种执行函数监控方法的流程图。参考图1,该执行函数监控方法具体包括:
S110、在进程管理器启动后,将系统关键函数替换为目标关键函数,目标关键函数由监控函数和系统关键函数封装得到。
其中,进程管理器(FastCGIProcess Manager,FPM)是PHP FastCGI管理器,用于管理PHP FastCGI进程池。FastCGI是一种用于Web服务器与动态脚本语言之间通信的协议,它允许Web服务器将请求转发给运行在后台的PHP解释器,而不是为每个请求启动一个新的解释器进程。PHP解释器负责解析和执行PHP脚本。示例性的,图2是本申请实施例提供的PHP服务运作方式的示意图。如图2所示,PHP生命周期为PHP解释器从启动到结束的整个过程,其中涵盖了模块初始化阶段、请求初始化阶段、PHP脚本执行阶段、请求关闭阶段和模块关闭阶段。进程管理器启动后会创建一个或多个PHP解释器的进程,以表征PHP解释器的启动,在PHP解释器启动后会进入模块初始化阶段。在模块初始化阶段,PHP解释器调用PHP_MINIT_FUNCTION初始化模块,并进行一些必要的变量申请和内存分配。Web服务器将请求发送至进程管理器,进程管理器通过SAPI接口将请求发送给PHP解释器后,PHP解释器进入请求初始化阶段,调用PHP_RINIT_FUNCTION,初始化PHP脚本的执行环境。然后,进入PHP脚本执行阶段,PHP解释器执行PHP脚本中的代码以处理请求,在PHP脚本执行完毕后进入请求关闭阶段,调用PHP_RSHUTDOWN_FUNCTION清理请求现场并释放相关资源。需要说明的,每当PHP解释器接收到一个请求时,即会重新进入请求初始化阶段、PHP脚本执行阶段和请求关闭阶段,即PHP解释器通过循环进入请求初始化阶段、PHP脚本执行阶段和请求关闭阶段来处理接收到的请求。在Web服务器退出或进程管理器关闭后,进入模块关闭阶段,调用PHP_RINIT_FUNCTION清理资源并关闭PHP解释器,PHP解释器的生命周期结束。
在本实施例中,系统关键函数为PHP解释器执行各个函数时调用的关键入口,即PHP解释器会通过系统关键函数调用函数执行。示例性的,PHP解释器在处于模块初始化阶段时,将PHP解释器的系统关键函数替换为由监控函数和系统关键函数封装形成的目标关键函数,以使PHP解释器在调用系统关键函数执行PHP脚本的第一函数时可通过监控函数采集第一函数执行时的监控数据,在不修改PHP服务代码的前提下达到PHP服务无缝接入全链路监控的目的。其中,监控函数即为用于采集函数执行时的监控数据的函数。监控数据包括第一函数的执行结果和执行时间以及请求的地址、路径和发出时间等。
在该实施例中,PHP脚本包括多个第一函数,第一函数包括PHP语言函数和C语言函数,即PHP语言函数是使用PHP语言编写的函数,C语言函数是使用C语言编写的函数,因为在PHP服务中有一些高性能的场景需通过C语言实现。C语言函数通过扩展形式加载PHP解释器中,即C语言函数可视为PHP解释器的扩展函数。PHP语言函数对应的系统关键函数为第一系统关键函数,第一系统关键函数为ZEND_EXECUTE_EX函数,其为PHP解释器中用于执行PHP语言函数的操作码的函数。在PHP的生命周期中,当PHP脚本被解析并编译对应包括的多个第一函数的操作码后,操作码存储在op_array结构体中,然后PHP解释器调用ZEND_EXECUTE_EX函数以遍历执行这些第一函数中PHP语言函数的操作码。对此,可将第一系统关键函数替换为第一目标关键函数,第一目标关键函数由监控函数和第一系统关键函数封装得到,使得PHP脚本在执行过程中若执行到PHP语言函数,则可调用第一目标关键函数中的ZEND_EXECUTE_EX函数执行该PHP语言函数的操作码,并调用第一目标关键函数中的监控函数采集该PHP语言函数执行时的监控数据,实现对PHP语言函数的全链路监控。
C语言函数对应的系统关键函数为第二系统关键函数,第二系统关键函数为ZEND_EXECUTE_INTERNAL函数,其为PHP解释器中用于执行对应扩展的C语言函数的操作码的函数。当PHP脚本被解析并编译对应包括的多个第一函数的操作码后,操作码存储在op_array结构体中,然后PHP解释器调用ZEND_EXECUTE_INTERNAL函数以遍历执行这些第一函数中C语言函数的操作码。对此,可将第二系统关键函数替换为第二目标关键函数,第二目标关键函数由监控函数和第二系统关键函数封装得到,使得PHP脚本在执行过程中若执行到PHP语言函数,则可调用第二目标关键函数中的ZEND_EXECUTE_INTERNAL函数执行该C语言函数的操作码,并调用第二目标关键函数中的监控函数采集该C语言函数执行时的监控数据,实现对C语言函数的全链路监控。
S120、将进程管理器接收到的请求分配至PHP解释器,以通过PHP解释器执行对应的PHP脚本处理请求,PHP脚本包括多个第一函数。
在本实施例,请求是客户端通过Web服务器发往PHP服务处理的请求。参考图2,Web服务器(如Nginx或Apache)接收来自客户端的HTTP请求,Web服务器通过FastCGI协议将请求转发给进程管理器,进程管理器从进程池中选择一个可用的PHP解释器的进程处理该请求。进程管理器通过SAPI接口将请求发送至选中的PHP解释器,PHP解释器加载用于该请求时所执行的PHP脚本。PHP解释器在PHP脚本执行完毕后,表明请求处理完成,将请求的处理结果通过SAPI接口返回给进程管理器,进程管理器通过FastCGI协议将处理结果返回给Web服务器,Web服务器将处理结果发送给客户端。
PHP解释器在接收到SPAI接口传输的请求后,进入请求初始化阶段以调用PHP_RINIT_FUNCTION初始化PHP脚本的执行环境,之后进入PHP脚本执行阶段。在PHP脚本执行阶段,将PHP脚本解析并编译为操作码,通过PHP解释器中的Zend引擎执行操作码,依次执行PHP脚本包含的第一函数。在执行完PHP脚本后进入请求关闭阶段以调用PHP_RSHUTDOWN_FUNCTION清理请求现场并释放相关资源。
S130、在开始执行PHP脚本后,获取第一函数的函数名,将第一函数的函数名与预设的第二函数的函数名进行匹配。
其中,第二函数可理解为PHP服务中的核心函数。示例性的,PHP解释器在进入PHP脚本执行阶段后,在每执行一个第一函数之前,获取准备执行的第一函数的函数名,将该第一函数的函数名与预设的第二函数的函数名进行匹配,以确定该第一函数是否为PHP脚本中的核心函数,以在确定第一函数为核心函数时调用目标关键函数中的监控函数获取该核心函数执行时的监控数据,在确定第一函数不为核心函数则不调用监控函数。可理解,本实施例仅对PHP服务中的核心函数进行全链路监控,其余不太重要的函数可以不用监控,以有效提高监控的可靠性。而且监控函数执行时也会占用PHP脚本的执行时间,因此仅在核心函数执行时执行监控函数还可提高PHP脚本的执行效率,进而提高请求处理效率。
在该实施例中,在PHP解释器执行第一函数前,通过执行数据结构体获取第一函数的函数名。其中,执行数据结构体为EXECUTE_DATA结构体,EXECUTE_DATA结构体用于在PHP解释器的Zend引擎执行PHP脚本的操作码过中存储当前的执行上下文,即EXECUTE_DATA结构体包含了待执行的第一函数的许多信息,包括类名、函数名和参数等。因此,可通过EXECUTE_DATA结构体里的函数名属性获取准备执行的第一函数的函数名。需要说明,PHP脚本中包含了N个第一函数,则需要访问N次EXECUTE_DATA结构体以获取每次执行的第一函数的函数名。
在一实施例中,第二函数包括文件传输函数、redis数据库交互函数、redis数据库交互扩展函数、数据库访问函数、MySQL数据库交互函数。其中,文件传输函数为CURL函数,其为PHP解释器用于调用文件传输工具CURL的函数;redis数据库交互函数为PREDIS函数,其为PHP解释器用于与redis数据库进行交互的PHP语言编写的函数;redis数据库交互扩展函数为PHPREDIS,其为PHP解释器用于与redis数据库进行交互的C语言编写的扩展函数;数据库访问函数为PDO(PHP Data Objects)函数,其为PHP解释器用于统一各个数据库的访问接口的函数;MySQL数据库交互函数为MYSQLI,其为PHP解释器用于与MySQL数据库进行交互的扩展函数。文件传输函数、redis数据库交互函数、redis数据库交互扩展函数、数据库访问函数、MySQL数据库交互函数是PHP服务在处理请求时主要运行的函数,其反应了PHP服务的工作状态,因此可通过收集这些函数的流量、执行结果和执行时间等的监控数据,以通过收集到的监控数据准确分析PHP服务的工作状况,有利于提高对PHP服务的故障节点的定位效率和定位准确率。
S140、在第一函数的函数名与预设的第二函数的函数名相匹配的情况下,调用目标关键函数中的系统关键函数执行第一函数,以及调用目标关键函数中的监控函数获取执行第一函数的监控数据。
示例性的,若第一函数的函数名与预设的第二函数的函数名相匹配,则表明该第一函数为PHP脚本中待进行全链路监控的核心函数,此时可调用目标关键函数中的系统关键函数执行第一函数,以及调用目标关键函数中的监控函数获取第一函数的监控数据。若第一函数的函数名与预设的第二函数的函数名不匹配,则表明该第一函数不为PHP脚本中待进行全链路监控的核心函数,此时可跳过监控函数即仅调用目标关键函数中的系统关键函数执行第一函数。
在该实施例中,监控数据主要包括请求的地址、路径和发出时间以及第一函数的执行结果和执行时间。请求的地址、路径和发出时间可在第一函数执行前获取,第一函数的执行结果和执行时间可在第一函数执行结束后获取,为了方便快捷获取这些监控数据,在目标关键系统中的系统关键函数的上文封装前置函数,在目标关键系统中的系统关键函数的下文封装后置函数,目标关键系统中的监控函数包括前置函数和后置函数,以通过前置函数和后置函数分别获取请求的地址、路径和发出时间以及第一函数的执行结果和执行时间。示例性的,图3是本申请实施例提供的通过前置函数和后置函数获取监控数据的流程图。如图3所示,该通过前置函数和后置函数获取监控数据的步骤具体包括S1401-S1403:
S1401、调用目标关键函数中的前置函数获取请求的地址、路径和发出时间。
S1402、调用目标关键函数中的系统关键函数执行第一函数。
S1403、在第一函数执行结束后,调用目标关键函数中的后置函数获取第一函数的执行结果和执行时间。
示例性的,若准备执行的第一函数为CURL_EXEC函数,其为PHP服务中的核心函数,则执行目标关键函数中的前置函数以获取到当前处理请求的地址、路径和发出时间。在执行完前置函数后,调用目标关键函数中的系统关键函数执行CURL_EXEC函数,其中,CURL_EXEC函数为PHP语言函数,即调用ZEND_EXECUTE_EX函数执行CURL_EXEC函数。在执行完CURL_EXEC函数后,执行目标关键函数中的后置函数以获取CURL_EXEC函数的执行结果和执行时间。本实施例通过目标关键函数中位于系统关键函数上下文的前置函数和后置函数获取准确获取核心函数的进出口流量和执行数据,实现了对核心函数的全链路监控。
在一实施例中,参考图2,在请求初始化阶段,PHP解释器可调用PHP_REQUEST_STARTUP函数以准备PHP解释器以处理当前的请求。在请求关闭阶段,PHP解释器可调用PHP_REQUEST_SHUTDOWN函数以执行请求结束时的清理工作。为了监控各个PHP解释器的入口流量以及请求的处理结果,可在PHP解释器执行PHP_REQUEST_STARTUP函数前通过目标关键函数中的前置函数获取请求的地址、路径和发出时间,在执行PHP_REQUEST_SHUTDOWN函数后通过目标关键函数中的后置函数获取请求的处理结果和处理时间。示例性的,图4是本申请实施例提供的通过前置函数和后置函数获取请求数据的流程图。如图4所示,该通过前置函数和后置函数获取请求数据的步骤具体包括S1501-S1504:
S1501、在PHP解释器接收到请求后,调用前置函数获取请求的地址、路径和发出时间。
示例性的,系统关键函数也是PHP解释器执行PHP_REQUEST_STARTUPPHP_REQUEST_STARTUP函数时调用的关键入口,PHP_REQUEST_STARTUP函数是请求初始化阶段的第一步,PHP解释器在接收到请求后开始执行。因此,PHP解释器可在接收到请求后也即执行PHP_REQUEST_STARTUP函数之前,可通过目标关键函数中处于系统关键函数上问的前置函数获取当前PHP解释器接收到的请求的地址、路径和发出时间。
S1502、调用目标关键函数中的系统关键函数执行请求初始化函数,请求初始化函数用于准备PHP解释器以处理当前接收到的请求。
其中,请求初始化函数即为PHP_REQUEST_STARTUP函数,其可以初始化全局变量、注册内置函数和类、加载扩展、执行请求特定的初始化代码和准备执行环境。PHP_REQUEST_STARTUP函数为PHP语言函数,PHP解释器可以调用ZEND_EXECUTE_EX函数执行PHP_REQUEST_STARTUP函数。PHP解释器在执行PHP_REQUEST_STARTUP函数以及其他请求初始化操作后,进入PHP脚本执行阶段,以执行PHP脚本处理当前接收到的请求。
S1503、在PHP解释器处理完请求处理,通过目标关键函数中的系统关键函数执行请求结束函数,请求结束函数用于清理和释放PHP解释器的资源。
其中,请求结束函数即为PHP_REQUEST_SHUTDOWN函数,其可以清理全局变量、销毁对象、关闭扩展、执行请求结束时的回调。在请求处理完成后,也即PHP脚本执行结束后,PHP解释器进入请求关闭阶段,在请求关闭阶段中,由于为PHP_REQUEST_SHUTDOWN函数为PHP语言函数,PHP解释器可以调用ZEND_EXECUTE_EX函数执行PHP_REQUEST_SHUTDOWN函数。
S1504、调用目标关键函数中的后置函数获取请求的处理结果和处理时间。
示例性的,执行PHP_REQUEST_SHUTDOWN函数是请求关闭阶段的最后一步,调用PHP_REQUEST_SHUTDOWN函数标志着当前请求处理流程的结束,因此在执行PHP_REQUEST_SHUTDOWN函数后,可调用目标关键函数中的后置函数获取请求的处理结果和处理时间。本实施例通过在调用请求初始化函数前调用前置函数获取请求的地址、路径和发出时间,在调用请求结束函数后调用后置函数获取请求的处理结果和处理时间,实现了对PHP解释器的进出口流量以及请求处理情况的全链路监控。
进一步的,在获取到监控数据后,将监控数据写入套接字文件,通过unix套接字将套接字文件发送至监控收集器,以使监控收集器对套接字文件中的监控数据进行清洗处理,将清洗后的监控数据上报至监控端。示例性的,前置函数在获取到请求的地址、路径和发出时间后,将请求的地址、路径和发出时间推送至套接字文件(sock文件)。后置函数在获取到第一函数的执行结果和执行时间,或者请求的处理结果和处理时间后,将第一函数的执行结果和执行时间或请求的处理结果和处理时间推送至套接字文件。通过unix套接字将套接字文件发送至监控收集器,由监控收集器对套接字文件中的监控数据进行清洗处理,监控端按照一定周期从监控收集器拉取清洗处理后的监控数据,并基于拉取到的监控数据在前端展示各个核心函数的进出口流量和执行状况。其中,监控收集器由agent(代理服务器)实现。需要说明,在模块初始化阶段中,会对套接字文件进行初始化处理,以避免将上一次采集的监控数据上传至监控端,造成监控异常,保证了对PHP服务的监控可靠性。本实施例通过unix套接字可高效低延迟将监控数据传输至监控端,提高了监控数据的传输效率,有利于实现对PHP服务的实时监控。
综上,本申请实施例提供的执行函数监控方法,通过在进程管理器启动后,将系统关键函数替换为目标关键函数,目标关键函数由监控函数和系统关键函数封装得到;将进程管理器接收到的请求分配至PHP解释器,以通过PHP解释器执行对应的PHP脚本处理请求,PHP脚本包括多个第一函数;在开始执行PHP脚本后,获取第一函数的函数名,将第一函数的函数名与预设的第二函数的函数名进行匹配;在第一函数的函数名与预设的第二函数的函数名相匹配的情况下,调用目标关键函数中的系统关键函数执行第一函数,以及调用目标关键函数中的监控函数获取执行第一函数的监控数据。通过上述技术手段,目标关键函数可替换PHP服务中各个函数执行时都会调用的系统关键函数,以埋入用于采集函数执行时的监控数据的监控函数,使得在PHP脚本执行过程中执行到核心函数前调用目标关键函数中的系统关键函数执行核心函数的同时,通过目标关键函数中的监控函数采集核心函数执行时的监控数据,在无需修改PHP服务代码的前提下达到PHP服务无缝接入全链路监控的目的,解决了现有技术中无法对PHP服务的核心函数进行全链路监控的技术问题,提高了对故障节点的定位效率,保证了后端业务的稳定性。
在上述实施例的基础上,图5为本申请实施例提供的一种执行函数监控装置的结构示意图。参考图5,本实施例提供的执行函数监控装置具体包括:关键函数替换模块21、请求分配模块22、函数名匹配模块23和第一监控模块24。
其中,关键函数替换模块21,被配置为在进程管理器启动后,将系统关键函数替换为目标关键函数,目标关键函数由监控函数和系统关键函数封装得到;
请求分配模块22,被配置为将进程管理器接收到的请求分配至PHP解释器,以通过PHP解释器执行对应的PHP脚本处理请求,PHP脚本包括多个第一函数;
函数名匹配模块23,被配置为在开始执行PHP脚本后,获取第一函数的函数名,将第一函数的函数名与预设的第二函数的函数名进行匹配;
第一监控模块24,被配置为在第一函数的函数名与预设的第二函数的函数名相匹配的情况下,调用目标关键函数中的系统关键函数执行第一函数,以及调用目标关键函数中的监控函数获取执行第一函数的监控数据。
在上述实施例的基础上,第一函数包括PHP语言函数和C语言函数,C语言函数通过扩展形式加载在PHP解释器中;相应的,关键函数替换模块21包括:第一替换单元,被配置为将第一系统关键函数替换为第一目标关键函数,第一系统关键函数为PHP解释器中用于执行PHP语言函数的操作码的函数,第一目标关键函数由监控函数和第一系统关键函数封装得到;第二替换单元,被配置为将第二系统关键函数替换为第二目标关键函数,第二系统关键函数为PHP解释器中用于执行对应扩展的C语言函数的操作码的函数,第二目标关键函数由监控函数和第二系统关键函数封装得到。
在上述实施例的基础上,函数名匹配模块包括:函数名获取单元,被配置为在PHP解释器执行第一函数前,通过执行数据结构体获取第一函数的函数名。
在上述实施例的基础上,监控函数包括前置函数和后置函数,前置函数封装于系统关键函数上文,后置函数封装于系统关键函数下文;相应的,第一监控模块包括:第一前置调用单元,被配置为调用目标关键函数中的前置函数获取请求的地址、路径和发出时间;第一关键调用单元,被配置为调用目标关键函数中的系统关键函数执行第一函数;第一后置调用单元,被配置为在第一函数执行结束后,调用目标关键函数中的后置函数获取第一函数的执行结果和执行时间。
在上述实施例的基础上,执行函数监控装置还包括第二监控模块,第二监控模块包括:第二前置调用单元,被配置为在PHP解释器接收到请求后,调用前置函数获取请求的地址、路径和发出时间;第二关键调用单元,被配置为调用目标关键函数中的系统关键函数执行请求初始化函数,请求初始化函数用于准备PHP解释器以处理当前接收到的请求;第三关键调用单元,被配置为在PHP解释器处理完请求处理,通过目标关键函数中的系统关键函数执行请求结束函数,请求结束函数用于清理和释放PHP解释器的资源;第二后置调用单元,被配置为调用目标关键函数中的后置函数获取请求的处理结果和处理时间。
在上述实施例的基础上,第二函数包括文件传输函数、redis数据库交互函数、redis数据库交互扩展函数、数据库访问函数、MySQL数据库交互函数。
在上述实施例的基础上,执行函数监控装置还包括:监控数据上传模块,被配置为在调用目标关键函数中的监控函数获取执行第一函数的监控数据之后,将监控数据写入套接字文件,通过unix套接字将套接字文件发送至监控收集器,以使监控收集器对套接字文件中的监控数据进行清洗处理,将清洗后的监控数据上报至监控端。
上述,本申请实施例提供的执行函数监控装置,通过在进程管理器启动后,将系统关键函数替换为目标关键函数,目标关键函数由监控函数和系统关键函数封装得到;将进程管理器接收到的请求分配至PHP解释器,以通过PHP解释器执行对应的PHP脚本处理请求,PHP脚本包括多个第一函数;在开始执行PHP脚本后,获取第一函数的函数名,将第一函数的函数名与预设的第二函数的函数名进行匹配;在第一函数的函数名与预设的第二函数的函数名相匹配的情况下,调用目标关键函数中的系统关键函数执行第一函数,以及调用目标关键函数中的监控函数获取执行第一函数的监控数据。通过上述技术手段,目标关键函数可替换PHP服务中各个函数执行时都会调用的系统关键函数,以埋入用于采集函数执行时的监控数据的监控函数,使得在PHP脚本执行过程中执行到核心函数前调用目标关键函数中的系统关键函数执行核心函数的同时,通过目标关键函数中的监控函数采集核心函数执行时的监控数据,在无需修改PHP服务代码的前提下达到PHP服务无缝接入全链路监控的目的,解决了现有技术中无法对PHP服务的核心函数进行全链路监控的技术问题,提高了对故障节点的定位效率,保证了后端业务的稳定性。
本申请实施例提供的执行函数监控装置可以用于执行上述实施例提供的执行函数监控方法,具备相应的功能和有益效果。
图6是本申请实施例提供的一种执行函数监控设备的结构示意图,参考图6,该执行函数监控设备包括:处理器31、存储器32、通信装置33、输入装置34及输出装置35。该执行函数监控设备中处理器31的数量可以是一个或者多个,该执行函数监控设备中的存储器32的数量可以是一个或者多个。该执行函数监控设备的处理器31、存储器32、通信装置33、输入装置34及输出装置35可以通过总线或者其他方式连接。
存储器32作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本申请任意实施例的执行函数监控方法对应的程序指令/模块(例如,执行函数监控装置中的关键函数替换模块21、请求分配模块22、函数名匹配模块23和第一监控模块24)。存储器32可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据设备的使用所创建的数据等。此外,存储器32可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
通信装置33用于进行数据传输。
处理器31通过运行存储在存储器32中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的执行函数监控方法。
输入装置34可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置35可包括显示屏等显示设备。
上述提供的执行函数监控设备可用于执行上述实施例提供的执行函数监控方法,具备相应的功能和有益效果。
本申请实施例还提供一种包含计算机可执行指令的存储介质,计算机可执行指令在由计算机处理器执行时用于执行一种执行函数监控方法,该执行函数监控方法包括:在进程管理器启动后,将系统关键函数替换为目标关键函数,目标关键函数由监控函数和系统关键函数封装得到;将进程管理器接收到的请求分配至PHP解释器,以通过PHP解释器执行对应的PHP脚本处理请求,PHP脚本包括多个第一函数;在开始执行PHP脚本后,获取第一函数的函数名,将第一函数的函数名与预设的第二函数的函数名进行匹配;在第一函数的函数名与预设的第二函数的函数名相匹配的情况下,调用目标关键函数中的系统关键函数执行第一函数,以及调用目标关键函数中的监控函数获取执行第一函数的监控数据。
存储介质——任何的各种类型的存储器设备或存储设备。术语“存储介质”旨在包括:安装介质,例如CD-ROM、软盘或磁带装置;计算机系统存储器或随机存取存储器,诸如DRAM、DDR RAM、SRAM、EDO RAM,兰巴斯(Rambus)RAM等;非易失性存储器,诸如闪存、磁介质(例如硬盘或光存储);寄存器或其它相似类型的存储器元件等。存储介质可以还包括其它类型的存储器或其组合。另外,存储介质可以位于程序在其中被执行的第一计算机系统中,或者可以位于不同的第二计算机系统中,第二计算机系统通过网络(诸如因特网)连接到第一计算机系统。第二计算机系统可以提供程序指令给第一计算机用于执行。术语“存储介质”可以包括驻留在不同位置中(例如在通过网络连接的不同计算机系统中)的两个或更多存储介质。存储介质可以存储可由一个或多个处理器执行的程序指令(例如具体实现为计算机程序)。
当然,本申请实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上的执行函数监控方法,还可以执行本申请任意实施例所提供的执行函数监控方法中的相关操作。
上述实施例中提供的执行函数监控装置、存储介质及执行函数监控设备可执行本申请任意实施例所提供的执行函数监控方法,未在上述实施例中详尽描述的技术细节,可参见本申请任意实施例所提供的执行函数监控方法。
上述仅为本申请的较佳实施例及所运用的技术原理。本申请不限于这里的特定实施例,对本领域技术人员来说能够进行的各种明显变化、重新调整及替代均不会脱离本申请的保护范围。因此,虽然通过以上实施例对本申请进行了较为详细的说明,但是本申请不仅仅限于以上实施例,在不脱离本申请构思的情况下,还可以包括更多其他等效实施例,而本申请的范围由权利要求的范围决定。

Claims (10)

1.一种执行函数监控方法,其特征在于,包括:
在进程管理器启动后,将系统关键函数替换为目标关键函数,所述目标关键函数由监控函数和所述系统关键函数封装得到;
将所述进程管理器接收到的请求分配至PHP解释器,以通过所述PHP解释器执行对应的PHP脚本处理所述请求,所述PHP脚本包括多个第一函数;
在开始执行所述PHP脚本后,获取第一函数的函数名,将所述第一函数的函数名与预设的第二函数的函数名进行匹配;
在所述第一函数的函数名与预设的第二函数的函数名相匹配的情况下,调用所述目标关键函数中的系统关键函数执行所述第一函数,以及调用所述目标关键函数中的监控函数获取执行所述第一函数的监控数据。
2.根据权利要求1所述的执行函数监控方法,其特征在于,所述第一函数包括PHP语言函数和C语言函数,所述C语言函数通过扩展形式加载在所述PHP解释器中;
相应的,所述将系统关键函数替换为目标关键函数包括:
将第一系统关键函数替换为第一目标关键函数,所述第一系统关键函数为所述PHP解释器中用于执行PHP语言函数的操作码的函数,所述第一目标关键函数由监控函数和所述第一系统关键函数封装得到;
将第二系统关键函数替换为第二目标关键函数,所述第二系统关键函数为所述PHP解释器中用于执行对应扩展的C语言函数的操作码的函数,所述第二目标关键函数由所述监控函数和所述第二系统关键函数封装得到。
3.根据权利要求1所述的执行函数监控方法,所述获取第一函数的函数名,包括:
在所述PHP解释器执行所述第一函数前,通过执行数据结构体获取所述第一函数的函数名。
4.根据权利要求1所述的执行函数监控方法,其特征在于,所述监控函数包括前置函数和后置函数,所述前置函数封装于所述系统关键函数上文,所述后置函数封装于所述系统关键函数下文;
相应的,所述调用所述目标关键函数中的系统关键函数执行所述第一函数,以及调用所述目标关键函数中的监控函数获取执行所述第一函数的监控数据,包括:
调用所述目标关键函数中的前置函数获取所述请求的地址、路径和发出时间;
调用所述目标关键函数中的系统关键函数执行所述第一函数;
在所述第一函数执行结束后,调用所述目标关键函数中的后置函数获取所述第一函数的执行结果和执行时间。
5.根据权利要求4所述的执行函数监控方法,其特征在于,所述方法还包括:
在所述PHP解释器接收到所述请求后,调用所述前置函数获取所述请求的地址、路径和发出时间;
调用所述目标关键函数中的系统关键函数执行请求初始化函数,所述请求初始化函数用于准备所述PHP解释器以处理当前接收到的请求;
在所述PHP解释器处理完所述请求处理,通过所述目标关键函数中的系统关键函数执行请求结束函数,所述请求结束函数用于清理和释放所述PHP解释器的资源;
调用所述目标关键函数中的后置函数获取所述请求的处理结果和处理时间。
6.根据权利要求1所述的执行函数监控方法,其特征在于,所述第二函数包括文件传输函数、redis数据库交互函数、redis数据库交互扩展函数、数据库访问函数、MySQL数据库交互函数。
7.根据权利要求1所述的执行函数监控方法,其特征在于,在所述调用所述目标关键函数中的监控函数获取执行所述第一函数的监控数据之后,还包括:
将所述监控数据写入套接字文件,通过unix套接字将所述套接字文件发送至监控收集器,以使所述监控收集器对所述套接字文件中的监控数据进行清洗处理,将清洗后的监控数据上报至监控端。
8.一种执行函数监控装置,其特征在于,包括:
关键函数替换模块,被配置为在进程管理器启动后,将系统关键函数替换为目标关键函数,所述目标关键函数由监控函数和所述系统关键函数封装得到;
请求分配模块,被配置为将所述进程管理器接收到的请求分配至PHP解释器,以通过所述PHP解释器执行对应的PHP脚本处理所述请求,所述PHP脚本包括多个第一函数;
函数名匹配模块,被配置为在开始执行所述PHP脚本后,获取第一函数的函数名,将所述第一函数的函数名与预设的第二函数的函数名进行匹配;
第一监控模块,被配置为在所述第一函数的函数名与预设的第二函数的函数名相匹配的情况下,调用所述目标关键函数中的系统关键函数执行所述第一函数,以及调用所述目标关键函数中的监控函数获取执行所述第一函数的监控数据。
9.一种执行函数监控设备,其特征在于,包括:
一个或多个处理器;
存储器,存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7任一所述的执行函数监控方法。
10.一种包含计算机可执行指令的存储介质,其特征在于,所述计算机可执行指令在由计算机处理器执行时用于执行如权利要求1-7任一所述的执行函数监控方法。
CN202410491447.7A 2024-04-23 2024-04-23 执行函数监控方法、装置、设备及存储介质 Pending CN118535238A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410491447.7A CN118535238A (zh) 2024-04-23 2024-04-23 执行函数监控方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410491447.7A CN118535238A (zh) 2024-04-23 2024-04-23 执行函数监控方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN118535238A true CN118535238A (zh) 2024-08-23

Family

ID=92390657

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410491447.7A Pending CN118535238A (zh) 2024-04-23 2024-04-23 执行函数监控方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN118535238A (zh)

Similar Documents

Publication Publication Date Title
CN111625452B (zh) 流量回放方法和系统
US9262300B1 (en) Debugging computer programming code in a cloud debugger environment
US7640459B2 (en) Performing computer application trace with other operations
US11716264B2 (en) In situ triggered function as a service within a service mesh
US20080155348A1 (en) Tracing operations in multiple computer systems
US20130054923A1 (en) Automatic memory leak detection
CN109408310B (zh) 服务器的调试方法、服务器及可读存储介质
CA2904253C (en) Computer system using in-service software upgrade
US10339533B2 (en) Methods and systems for scalable session emulation
CN111309570A (zh) 压力测试方法、介质、装置和计算设备
CN115167985A (zh) 一种虚拟化的算力提供方法及系统
CN112948248B (zh) 云计算服务中的软件调试的方法和装置
CN111736907B (zh) 一种自适应低延迟内存计算引擎的数据分析方法
CN117041111A (zh) 车云功能测试方法、装置、电子设备及存储介质
JP2005309838A (ja) 情報管理システムと情報管理方法、及び、そのための情報管理サブシステム
US11216352B2 (en) Method for automatically analyzing bottleneck in real time and an apparatus for performing the method
Assuncao et al. Dynamic workflow reconfigurations for recovering from faulty cloud services
Fukui et al. Iot edge server ros node allocation method for multi-slam on many-core
CN118535238A (zh) 执行函数监控方法、装置、设备及存储介质
CN113296795A (zh) 应用部署方法、装置、设备、存储介质及程序产品
CN114489754B (zh) 可配置服务管理方法及装置
Denaro et al. Performance testing of distributed component architectures
CN114816668A (zh) 一种虚拟机内核监测方法、装置、设备及存储介质
CN109995617A (zh) 主机管理特性的自动化测试方法、装置、设备及存储介质
McGraw et al. Software framework in support of dynamic situation assessment and predictive capabilites for JSB-RD

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