知识大全 测量PHP 应用程序

Posted 测量

篇首语:读书也像开矿一样“沙里淘金”本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 测量PHP 应用程序相关的知识,希望对你有一定的参考价值。

高性能MySQL:测量PHP 应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   测量PHP 应用程序

  如果不使用New Relic 也有其他的选择 尤其是对PHP 有好几款工具都可以帮助进行性能剖析 其中一款叫做xhprof(//pecl php net/package/xhprof) 这是Facebook开发给内部使用的 在 年开源了 xhprof 有很多高级特性 并且易于安装和使用 它很轻量级 可扩展性也很好 可以在生产环境大量部署并全天候使用 它还能针对函数调用进行剖析 并根据耗费的时间进行排序 相比xhprof 还有一些更底层的工具 比如xdebug Valgrind 和cachegrind 可以从多个角度对代码进行检测注 有些工具会产生大量输出 并且开销很大 并不适合在生产环境运行 但在开发环境却可以发挥很大的作用

  下面要讨论的另外一个PHP 性能剖析工具是我们自己写的 基于本书第二版的代码和原则扩展而来 名叫IfP(instrumentation for php) 代码托管在Goole Code 上(//code google /p/instrumentation for php/) Ifp 并不像xhprof 一样对PHP 做深入的测量 而是更关注数据库调用 所以当无法在数据库层面进行测量的时候 Ifp 可以很好地帮助应用剖析数据库的利用率 Ifp 是一个提供了计数器和计时器的单例类 很容易部署到生产环境中 因为不需要访问PHP 配置的权限(对很多开发人员来说 都没有访问PHP配置的权限 所以这一点很重要)

  Ifp 不会自动剖析所有的PHP 函数 而只是针对重要的函数 例如 对于某些需要剖析的地方要用到自定义的计数器 就需要手工启动和停止 但Ifp 可以自动对整个页面的执行进行计时 这样对自动测量数据库和memcached 的调用就比较简单 对于这种情况就无须手工启动或者停止 这也意味着 Ifp 可以剖析三种情况 应用程序的请求(如page view) 数据库的查询和缓存的查询 Ifp 还可以将计数器和计时器输出到Apache 通过Apache 可以将结果写入到日志中 这是一种方便且轻量的记录结果的方式 Ifp 不会保存其他数据 所以也不需要有系统管理员的权限

  使用Ifp 只需要简单地在页面的开始处调用start_request() 理想情况下 在程序的一开始就应当调用

  require_once( Instrumentation php )

  Instrumentation::get_instance() >start_request()

  这段代码注册了一个shutdown函数 所以在执行结束的地方不需要再做更多的处理

  IFP会自动对SQL添加注释 便于从数据库的查询日志中更灵活地分析应用的情况 通过SHOW PROCESSLIST也可以更清楚地知道性能低的查询出自何处 大多数情况下 定位性能低下查询的来源都不容易 尤其是那些通过字符串拼接出来的查询语句 都没有办法在源代码中去搜索 那么IFP的这个功能就可以帮助解决这个问题 它可以很快定位到查询是从何处而来的 即时应用和数据库中间加了代理或者负载均衡层 也可以确认是哪个应用的用户 是哪个页面请求 是源代码中的哪个函数 代码行号 甚至是所创建的计数器的键值对 下面是一个例子

   File: index php Line: Function: fullCachePage request_id: ABC session_id: XYZ

  SELECT * FROM …

  如何测量MySQL 的调用取决于连接MySQL 的接口 如果使用的是面向对象的mysqli接口 则只需要修改一行代码 将构造函数从mysqli 改为可以自动测量的mysqli_x 即可 mysqli_x 构造函数是由Ifp 提供的子类 可以在后台测量并改写查询 如果使用的不是面向对象的接口 或者是其他的数据库访问层 则需要修改更多的代码 如果数据库调用不是分散在代码各处还好 否则建议使用集成开发环境(IDE)如Eclipse 这样修改起来要容易些 但不管从哪个方面来看 将访问数据库的代码集中到一起都可以说是最佳实践

  Ifp 的结果很容易分析 Percona Toolkit 中的pt query digest 能够很方便地从查询注释中抽取出键值对 所以只需要简单的将查询记录到MySQL 的日志文件中 再对日志文件进行处理即可 Apache 的mod_log_config 模块可以利用Ifp 输出的环境变量来定制日志输出 其中的宏%D 还可以以微秒级记录请求时间

  也可以通过LOAD DATA INFILE 将Apache 的日志载入到MySQL 数据库中 然后通过SQL 进行查询 在Ifp 的网站上有一个PDF 的幻灯片 详细给出了使用示例 包括查询和命令行参数都有

  或许你会说不想或者没时间在代码中加入测量的功能 其实这事比想象的要容易得多 而且花在优化上的时间将会由于性能的优化而加倍地回报给你 对应用的测量是不可替代的 当然最好是直接使用New Relic xhprof Ifp 或者其他已有的优化工具 而不必重新去发明 轮子

  MySQL 企业监控器的查询分析功能

  MySQL 的企业监控器(Enterprise Monitor)也是值得考虑的工具之一 这是Oracle 提供的MySQL 商业服务支持中的一部分 它可以捕获发送给服务器的查询 要么是通过应用程序连接MySQL 的库文件实现 要么是在代理层实现(我们并不太建议使用代理层) 该工具有设计良好的用户界面 可以直观地显示查询的剖析结果 并且可以根据时间段进行缩放 例如可以选择某个异常的性能尖峰时间来查看状态图 也可以查看EXPLAIN 出来的执行计划 这在故障诊断时非常有用

       返回目录 高性能MySQL

       编辑推荐

       ASP NET开发培训视频教程

  数据仓库与数据挖掘培训视频教程

cha138/Article/program/MySQL/201311/29717

相关参考

知识大全 PHP 应用程序配置模式

PHP应用程序配置模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文举例说明了创建可配置P

知识大全 PHP与已存在的Java应用程序集成

PHP与已存在的Java应用程序集成  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  PHP功能的

知识大全 64位系统php运行报错

  问题一php运行报错%不是有效的win应用程序  php环境配置完毕后运行成功但运行php就报错错误提示是"%不是有效的win应用程序"英文报%isnotavalidWinapplication第

知识大全 php编写的闹钟程序

cha138/Article/program/PHP/201311/20880

知识大全 怎样不成为伪PHP程序员

怎样不成为伪PHP程序员  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  成为一名优秀的PHP程序

知识大全 PHP注释实例应用

PHPWeb开发学习实录:PHP注释实例应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &n

知识大全 十个php一些不为人知的高级应用技巧

  PHP独特的语法混合了CJavaPerl以及PHP自创新的语法它可以比CGI或者Perl更快速的执行动态网页用PHP做出的动态页面与其他的编程语言相比PHP是将程序嵌入到HTML文档中去执行执行效

知识大全 界定PHP代码实例应用

PHPWeb开发学习实录:界定PHP代码实例应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 推荐php开发利器 快速创建web应用

  近日美国“开源软件”项目Openbiz新发布了一款名为OpenbizCubiDev的PHP的应用开发利器宣称可以让开发人员在分钟内通过配置和向导完成创建一个功能完善的企业级应用程序这是空穴来风还是

知识大全 使用ZendEncode编译PHP程序

使用ZendEncode编译PHP程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一ZendEn