作用
调试 eg: xdebug, zend debug
性能分析 xhprof
链路监控 apm, molten, skywalking-php-sdk
实现方式
总的来讲有两种实现方式
添加代理,对每个函数的执行增加代理,在代理中针对性的增加记录。
在模块注册过程中修改CG(function_table) 或 CG(class_table)。
添加代理的方式
不同场景下对数据的收集详细程度不同,例如调试和性能分析时需要运行相关的所有数据,而在链路监控中只需要针对性的进行处理即可,在molten中即通过设置需要代理的名单来进行针对性的监控。
综上可以看出通过代理的方式优点是可以很方便的针对用户定义的函数/类进行监控,但是性能损耗也会受到框架及业务逻辑复杂度的影响。
修改Hash表的方式
在模块注册过程中修改Hash表相比于代理来说性能损耗很小,损耗大小主要取决于探针逻辑及增加的钩子的多少(探针逻辑越复杂,钩子执行的越多性能损耗也就越高)
以下代码为Molten中的实现方式。
针对内置函数也可以使用修改handler的方式来处理,如下为opcache中覆盖内置文件相关函数的方法,相比上面的直接替换的方式更简单易懂,skywalking-php-sdk中使用的即是这种方式。
上海盛霞光电科技有限公司做为一家专业的高端仪器仪表供应商,自身在德国汉诺威设有采购中心,针对进口备品特别是欧美产品有着独到的理解和优势,经过几年的技术及人员累积,目前上海盛霞光电科技有限公司可以针对产品提供完善的备件,针对产品系列问题可以提供一条龙服务,大大缩短了客户维修等待的时间,欢迎广大用户前来咨询交流