[发明专利]一种PHP应用实时性能数据采集分析方法和系统在审
申请号: | 202010774335.4 | 申请日: | 2020-08-05 |
公开(公告)号: | CN112100021A | 公开(公告)日: | 2020-12-18 |
发明(设计)人: | 高驰涛;李忠益;王鸿杰 | 申请(专利权)人: | 云智慧(北京)科技有限公司 |
主分类号: | G06F11/30 | 分类号: | G06F11/30;G06F9/448;G06F9/455 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 100080 北京市海淀*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 php 应用 实时 性能 数据 采集 分析 方法 系统 | ||
1.一种PHP应用实时性能数据采集分析方法,其包括如下步骤:
S1、执行黑名单初始化过程;
S2、执行替换和挂载钩子的指针操作;
S3、初始化运行栈和函数字典,通过已经挂载的钩子获取函数名并记录函数的开始时间,通过函数名判断是否存在于黑名单中;
S4、在函数运行结束之后获取函数的参数并记录结束时间,判断是否存在于函数字典中;
S5、归还已经替换和挂载的钩子指针;
S6、销毁函数黑名单。
2.如权利要求1所述的PHP应用实时性能数据采集分析方法,其特征在于,步骤S1中,黑名单函数包括字符串String函数、数组Array函数、时间Data/Time函数、数学Math函数,较佳的,步骤S1中的黑名单函数算法使用Zend引擎内的HashTable完成,其中,较佳的,使用HashTable的zend_hash_init完成初始化、使用zend_hash_add_empty_element完成写入、使用zend_hash_exists完成存在检测。
3.如权利要求2所述的PHP应用实时性能数据采集分析方法,其特征在于,步骤S1的具体步骤包括:
步骤S11、首先将函数黑名单定义成字符串数组,在PHP全局变量初始化时,将该数组循环插入黑名单HashTable,并把该HashTable存储进PHP全局变量中;
步骤S12、在Execute过程中的zend_execute和zend_execute_internal钩子中获取函数名;
步骤S13、获取函数名后,依据函数名,使用zend_hash_exists方法从HashTable中进行快速查找是否存在,如果存在,则执行步骤S14,如果不存在,则执行步骤S15;
步骤S14、退出后续的所有数据采集工作;
步骤S15、继续执行后续数据采集工作。
4.如权利要求2所述的PHP应用实时性能数据采集分析方法,其特征在于,步骤S2中替换和挂载的钩子包括:
钩子zend_compile_file;
钩子zend_execute和zend_execute_internal;
异常钩子zend_throw_exception;和
错误钩子zend_error_cb;
较佳的,替换和挂载过程如下:
1)将clone_zend_compile_file函数指针指向zend_compile_file,将zend_compile_file指针指向agent_zend_compile_file,在agent_zend_compile_file方法中再调用clone_zend_compile_file,完成zend_compile_file的PHP编译扩展挂载;
2)将clone_zend_execute函数指针指向zend_execute,将zend_execute指针指向agent_zend_execute指针,在agent_zend_execute方法中再调用clone_zend_execute,完成zend_execute的PHP用户函数运行扩展挂载;
3)将clone_zend_execute_internal函数指针指向zend_execute_internal,将zend_execute_internal指针指向agent_zend_execute_internal,在agent_zend_execute_internal方法中再调用clone_zend_execute_internal,完成zend_execute_internal的PHP内置函数运行扩展挂载;
4)将clone_zend_throw_exception函数指针指向zend_throw_exception,将zend_throw_exception指针指向agent_zend_throw_exception,在agent_zend_throw_exception方法中再调用clone_zend_throw_exception,完成zend_throw_exception的异常钩子扩展挂载;
5)将clone_zend_error_cb函数指针指向zend_error_cb,将zend_error_cb指针指向agent_zend_error_cb,在agent_zend_error_cb方法中再调用clone_zend_error_cb,完成zend_error_cb的错误钩子扩展挂载;
较佳的,归还过程如下:
1)将zend_compile_file函数指针指向clone_zend_compile_file,完成zend_compile_file的PHP编译钩子归还;
2)将zend_execute函数指针指向clone_zend_execute,完成zend_execute的PHP用户函数运行扩展钩子归还;
3)将zend_execute_internal函数指针指向clone_zend_execute_internal,完成zend_execute_internal的PHP内置函数运行扩展钩子归还;
4)将zend_throw_exception指针指向clone_zend_throw_exception,完成zend_throw_exception的异常钩子归还;
5)将zend_error_cb指针指向clone_zend_error_cb,完成zend_error_cb的错误钩子归还。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于云智慧(北京)科技有限公司,未经云智慧(北京)科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010774335.4/1.html,转载请声明来源钻瓜专利网。