返回首页

干货云智慧透视宝PHP应用性能监控实

1PHP应用场景

自年创建以来,PHP早已由小家子气的”PersonalHomePageTools”,演变为”PHP:HypertextPreprocessor”,同时基于强大的可扩展性与敏捷迭代特性,基本已经成为互联网科技公司的必备语言,为推动互联网发展提供着源源不断的强大动力。

同时基于PHP的开源软件和开发框架(优秀如WordPress,ZendFramework,Laravel,Yaf,Hiphop等等)也在不断地发展,使得PHP也被除互联网公司之外的企业所大规模使用,而进入企业级应用开发语言之列。

2用户监控需求

我们知道,PHP的门槛低迭代快使得很多项目,因为种种原因变得架构不清:

1.开发者水平不足;

2.项目是从外包团队接手;

3.历史问题,积重难返;

4.反正性能奇差,反正已经愈发不可控;

而要发现问题却又因为各种原因不可或很难调试,这些原因诸如:

1.时间太久了,我也忘了怎么写的,要看代码

2.因为数据不可造,逻辑无法到达,不能重现

3.项目不是我所在的团队开发,架构以及代码,羞涩恶心。

图:PHP应用系统的执行模型

PHP的运行阶段可以大致分成三个阶段:

1.Parse

2.Compile

3.Execute

其中Compile过程将会产生OpCode和ClassTable,FunctionTable,然后交给Execute最终执行。OpCode是中间码,被ZendEngine调用执行。

不难看出,其实PHP与Java类似,都是产生中间码,运行在各自的”虚机”上,可是为什么PHP的性能较Java、.NET、Go而言差别这么大呢?

一句话讲,大家普遍认为的”PHP是解释型语言”其实是不严谨的,PHP不是不编译,而是每次执行都编译,除此之外最严重的问题即是较难实现并行运算(注意只说”较难”,使用PHP进行并行计算的方案不止一个)。基于OpCode的存在,已经诞生了大量cache工具扩展,可以有效提升PHP应用的执行性能,如OpCache,Apc,Apcu,Xcache等等。

对于使用php开发的网站、接口、应用系统而言,性能的瓶颈点会在什么地方呢?做过PHP应用性能优化的朋友们都知道,递归、循环、资源操作、资源释放等都是常见的瓶颈点,这些经常会造成阻塞或锁。

可以得出CPU、内存、各种I/O、各种网络带宽等的消耗是性能瓶颈点中的重中之重,我们可以简单归结为:外部服务(如第三方API),资源读写,代码异常。

处理这些问题的通用作法是使用Xhprof,Xdebug或PHP-trace等工具来找出,并配合架构师或高级工程师经验来处理,方法包括单例、事务、按需加载、短事务、及时释放等等(对于大多数公司与开发人员来讲,碰到性能问题更多的作法是盲目的猜测与挠头).但这些方法有哪些不足呢?

一眼可知,只能在测试或生产环境,产生问题并明确之后进行处理.测试环境还好,但如果是生产环境,事后处理虽能补救,但大多数面对的都是因功能受损造成的投诉或更严重的业务损失。

能够在生产环境第一时间发现或规避可能的性能问题;准确记录已知或未知故障现场。这两点,则成为应用性能管理的迫切需求。

3透视宝PHP监控实现原理

图:Hook运用示意

PHP运行支撑的ZendEngine早在设计过程中已经预留了丰富的Hook,可以有效干涉处理过程中的几个关键步骤。

云智慧透视宝PHPAgent的研发实现,当然不能影响应用系统原有的代码,那么最简单有效的方式必然是实现一个PHP扩展,PHPAgent利用了以下几个Hook:

1.zend_







































北京哪个医院能治好白癜风
治疗白癜风的医院

版权所有:Copyright ? 2012-12-20 php发展_php应用_php开发

电话:

当前时间: