十年之前,我们国内的网页设计师、程序员大部分都使用ASP等语言进行Web编程,但是随着网络环境的改变以及网站形态的变化,越来越多的网站陆续从ASP转向PHP,目前国外的Google、Facebook,国内的淘宝、百度等大型网站,都使用了PHP语言进行前端实现。
创新互联建站长期为成百上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为蒙城企业提供专业的成都网站设计、做网站,蒙城网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。这样的趋势变化,与本身PHP语言的优势有很大的关系。一来是因为PHP语言具备跨平台的优势,无论是Linux还是Windows都可以进行兼容。比如我们玩虚拟主机、VPS服务器的站长都知道,如今Linux服务器成本更低,也容易找到更多的主机提供商,而且在Linux平台中PHP项目兼容性更好,且成本更低。二来PHP语法简单,有成熟的开源软件和框架支持。众所周知的WordPress、Zencart、Magento等知名开源软件都是采用PHP架构的,而相对ASP等其他语言虽然有开源软件,但是基本上是个人兴趣爱好开发的,后续版本的跟进与维护比较差。
第一、代码质量成为PHP应用性能瓶颈
需求的暴涨导致从业人员的大幅增加,如今国内的PHP程序员也越来越多,技术水平参差不齐,虽然能够完成某些功能和项目,但由于代码质量不高,项目执行效率往往大打折扣。然而很多时候,我们更重视功能的实现,而忽视了代码性能的问题,比如笔者经常看到有些网友抱怨代码执行效率低是服务器CPU、内存的性能和稳定性问题,殊不知其实是PHP执行效率出现问题导致的。
A – 开发者能力差异和技术不严谨
在国内,我们大部分从业开发者并不是科班出身,可能是后期自学或者根据公司项目的需要然后逐渐形成的具有个人和公司特点的书写代码习惯,使然基本的功能能够实现,但是代码规范化、优化性能并不是很好,这就需要我们用到监控工具检测项目不足之处。
B – 项目外包转接
我们很多公司的项目初期或者过程中都是外包团队或者其他同事完成的,在我们经手后会看到各种的不习惯的书写方式,这个时候我们就需要快速的调整和完善相互的兼容问题,可以用到监控工具实现。
C – 历史版本问题
与上面一点有些类似,因为项目的不断推进和调整,可能会出现历史版本的重叠,PHP功能实现效率执行度不高。
经常看到有人认为的”PHP是解释型语言”其实是不严谨的,PHP不是不编译,而是每次执行都编译,除此之外最严重的问题即是较难实现并行运算(注意只说”较难”,使用PHP进行并行计算的方案不止一个)。基于Op Code的存在,已经诞生了大量cache工具扩展,可以有效提升PHP应用的执行性能,如OpCache,Apc,Apcu,Xcache等等。
对于使用PHP开发的网站、接口、应用系统而言,性能的瓶颈点会在什么地方呢? 做过PHP应用性能优化的朋友们都知道,递归、循环、资源操作、资源释放等都是常见的瓶颈点,这些经常会造成阻塞或锁。
可以得出CPU 、内存 、各种I/O、各种网络带宽等的消耗是性能瓶颈点中的重中之重,我们可以简单归结为:外部服务(如第三方API),资源读写,代码异常。
处理这些问题的通用作法是使用Xhprof,Xdebug或PHP-trace等工具来找出,并配合架构师或高级工程师经验来处理,方法包括单例、事务、按需加载、短事务、及时释放等等(对于大多数公司与开发人员来讲,碰到性能问题更多的作法是盲目的猜测与挠头),但这些方法有哪些不足呢?
一眼可知,只能在测试或生产环境,产生问题并明确之后进行处理.测试环境还好,但如果是生产环境,事后处理虽能补救,但大多数面对的都是因功能受损造成的投诉或更严重的业务损失。
能够在生产环境第一时间发现或规避可能的性能问题;准确记录已知或未知故障现场。这两点,则成为应用性能管理的迫切需求。
传统的方法往往要耗费很多时间,而且对技术要求非常高,水平一般的程序员往往很难独自搞定。所以笔者建议大家试试透视宝这款产品,与我们熟悉的监控宝一样来自云智慧,这是一款应用性能管理软件,可以对应用底层的代码执行效率进行全面的监控,帮助程序员快速发现影响应用执行速度的性能瓶颈,轻松实现代码的调整和优化。
第二、透视宝PHP监控原理与优势
云智慧透视宝通过对PHP代码执行的深入研究实现,在不影响应用系统原有代码执行性能的情况下,实现PHP代码性能监控最简单有效的方式是通过PHP扩展,而云智慧透视宝的PHPAgent正是利用了以下几个Hook:
A - zend_compile_file & zend_compile_string
加载分析文件或字符串,本身就会造成非常大的IO,如果过多地执行加载,无疑会造成内存和CPU的消耗.通过这两个hook,可以取得文件名、执行行数、使用内存和CPU占用时间。
B - zend_execute & zend_execute_internal
通过这两个hook的使用,我们可以准确地分析得出一个PHP应用中的类调用、方法调用、方法参数、内存占用和CPU占用,加以分析,便可以准确得出应用系统运行过程中的方法运行栈,API调用地址,SQL语句,Cache Key以及Cache命中等关键信息。
C - zend_throw_exception_hook
利用异常钩子,可以准确地得到应用系统运行过程中出现的异常信息,当然包括异常发生的类方法位置,参数,异常code和异常message。
D - zend_error_cb
错误钩子则更加直接,可以准确得到系统运行过程中出现的任何一个warning,代码错误或语法错误。
PHPAgent注册与应用Hook流程(上图)
zend_execute hook的应用示意(伪代码)
上图大致解释了PHPAgent是如何运用zend_execute hook进行数据采集的: 先取得方法名,同时通过规则过滤引擎,判断哪些是需要关注或不关注的(类方法的黑白名单),然后通过AGENT_BEGIN宏记录方法开始时间,方法名,行数,内存起点与参数,在执行原有zend_execute之后,再通过AGENT_END宏记录结束时间,内存止点。
通过上述Hook的应用,已经可以得到我们所关注的PHP代码执行性能指标数据:类方法执行顺序,执行时间,内存占用,接口DB等资源连接,SQL语句和执行时间等。
经过严格的压力测试和生产环境部署实践,PHPAgent对原有应用系统的性能影响在5%以内。经过一些参数调配,可以将性能影响降到更低,这些参数包括:是否启动异常钩子、是否启动错误钩子、是否启用数据采样、是否启用栈追踪、是否使用黑白名单(URLHeaderCookieRequest Params)、是否启用UDP发送代理、关注请求时间响应阈值、关注方法时间响应阈值。
对于我这样没有太多经验的PHP开发者来说,透视宝具备面向多平台和多语言的应用监控与代码诊断,比如我们常用的PHP语言项目,可以帮助我们快速的开发、部署和维护应用,可以帮助我们检测应用存在的性能风险以及执行效率低的代码和SQL执行语句,此外,还可以帮助我们提升代码的书写习惯和编程水平。
第三、透视宝PHP监控性能的实现与部署
普通的站长和开发者在使用PHP开源软件和框架的时候,也可以使用透视宝进行应用的性能的检测,以便于我们优化应用的执行效率。要知道,很多时候服务器性能的变化,并不一定是服务器的稳定性问题,而是应用程序的执行效率问题。
透视宝的使用非常简单,而且目前是免费注册和使用的,接下来我们通过具体的注册和部署过程,来体验一下透视宝这款APM产品的实际应用。