专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »PHP教程 » php查找字符:为 PHP 应用提速、提速、再提速!第 2 部分: 分析 PHP 应用程序以查找、诊断和加速运行缓慢的代码 »正文

php查找字符:为 PHP 应用提速、提速、再提速!第 2 部分: 分析 PHP 应用程序以查找、诊断和加速运行缓慢的代码

来源: 发布时间:星期一, 2009年1月12日 浏览:43次 评论:0
  “为 PHP 应用提速、提速、再提速!” 系列文章 第 1 部分 演示了如何使用 XCache(PHP 操作码缓存Cache) 加速整个站点XCache(仅是少数几种缓存Cache包中种)保留了编译过程输出去掉了其他冗余工作只要页面没有发生变化缓存Cache后页面就能够胜任代理作用当页面发生变化时缓存Cache后页面就会变为无效并被替换掉

  操作码缓存Cache —— 以及个操作码优化器通常由相同包提供 —— 是种加快站点响应低成本技术很多缓存Cache包是免费并且是开源无需改变任何代码即可从中受益

  当然在某些应用相比较实际执行时间将 PHP 源代码文件翻译为其相应操作码所需时间微不足道连接到远程数据库服务器使用低效 SQL 语句进行查询以及其他大量解析和操作数据工作都非常繁琐也因此增加了开销甚至产生浪费良好网络设计和灵巧数据库结构可以使时间冗长和查询缓慢情况有所改善如果需要话还可以向友好专家请求帮助但是如果代码运行缓慢您可能更希望自己处理

  但是从何开始呢?正如人们普遍认为在代码完成前调试代码做法很不明智 —— 代码首次实现可能会非常迅速当代码正确且能实现相应功能时不管其表面上看起来运行缓慢还是实际如此首先要做就是对其性能进行测试或基准测试不执行这样诊断而尝试去优化代码无疑是在黑暗中摸索

  个简单性能指标是挂钟时间(wall clock time)或测量页面请求和完成呈现的间实际延迟对于某些情况 —— 比如在您自己工作站本地运行 Web 服务器、数据库和浏览器 —— 挂钟时间能够提供信息然而挂钟时间对于其他大多数情况而言并无实际意义比如网络延迟时间、活动 Web 服务器或者活动数据库

  种更精确测量 —— 甚至可以测量运行单个源代码语句时间 —— 可以采用代码分析器分析器通常被实现为 PHP 运行时引擎扩展记录语句开始和结束 delta、记录开始和结束的间 delta 并捕获对来到请求形成响应总时间有了这种垂直度就可以将语句、循环、、类或者是运行缓慢库作为分析目标如果不是时间而是内存使用出现了问题那么个优秀分析器还可以显示组件内存占用情况

  PHP 个较流行分析器是 Xdebug它还为交互地调试 PHP 应用提供了服务器挂钩(hook)(参见“调试更好思路方法”以了解更多信息该系列部分将探讨高级交互式调试) Xdebug 很容易从源代码构建将其作为 Zend 扩展进行安装也非常简单(现在已有针对某些平台 2进制文件)当就绪后对基于 PHP 页面每个请求都将生成可在 KCacheGrind 中查看数据集

  构建并安装 Xdebug

  如果具备了 PHP 实用工具 phpize 和 php-config而且具有对系统 php.ini 配置文件访问权那么安装和设置 Xdebug 只需几分钟时间下面给出指导介绍说明针对 Linux®不过在 Mac OS X 上安装步骤实际上和此类似(您可以从 Xdebug Web 站点找到针对 Microsoft® Windows® Xdebug 预编译版本)

  Xdebug 最新版本为 V2.0.0RC3(最终版本 V2.0.0 在您阅读此文时也许已经可用)下载并解包 tarball然后切换到源代码子目录确保 phpize 和 php-config 位于 shell PATH准备使用 phpize 进行构建

  清单 1. 设置 Xdebug

$ wget http://www.xdebug.org/files/xdebug-2.0.0RC3.tgz
$ tar xzf xdebug-2.0.0RC3.tgz
$ cd xdebug-2.0.0RC3/xdebug-2.0.0RC3
$ phpize
Configuring for:
PHP Api Version:     20020918
Zend Module Api No:   20020429
Zend Extension Api No:  20050606


  phpize 产品是个脚本 —— 名为配置 —— 它对余下构建过程进行配置要构建 Xdebug在 make 后紧接着输入 ./configure 即可

  清单 2. 构建 Xdebug

$ ./configure
checking build system type... i686-apple-darwin8.8.1
checking host system type... i686-apple-darwin8.8.1
checking for egrep... grep -E
...
$ make
...
Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).


  make 命令生成 Xdebug 扩展xdebug.so剩下工作就是使用 sudo make 进行安装

$ sudo make
Installing shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20020429/


  注: 如果在终端窗口中运行最后个命令请选择并复制最后步中发出目录在下个步骤中将会用到它

  最后要使配置数据可视化必须使用 KCacheGrind 和 GraphViz包含 K Desktop Environment (KDE) Linux 发行版很可能已经含有了 KCacheGrind 和 GraphViz如果没有包含适合您所使用 Linux 那些版本也不难找到Debian 用户可以使用 Advanced Packaging Tool (APT) 快速安装 KCacheGrind 和 GraphViz 以及所有包依赖关系

  清单 3. 安装 KCacheGrind

$ apt-cache search kcachegrind
valgrind-callgrind - call-graph skin for valgrind
kcachegrind - visualisation tool for valgrind profiling output
kcachegrind-converters - format converters for KCachegrind profiling visualisation tool
$ apt-cache search graphviz
graphviz - rich of graph drawing tools
graphviz-dev - graphviz Libs and Headers against which to build applications
graphviz-doc - additional documentation for graphviz
libdeps-renderer-dot-perl - DEPS renderer plugin using GraphViz/dot
...
$ sudo apt-get kcachegrind graphviz
...


  如果没有将 KDE 安装到系统中KCacheGrind、GraphViz 以及所有必要内容将占用大约 90 MB 磁盘空间

  配置 Xdebug

  安装了 Xdebug 扩展后就可以准备启用和配置该扩展了在文本编辑器中打开 php.ini并添加以下代码行

  清单 4. 启用和配置该扩展

zend_extension = /usr/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so
xdebug.profiler_output_dir = "/tmp/xdebug/"
xdebug.profiler_enable = Off
xdebug.profiler_enable_trigger = 1


  第行 zend_extension 加载 Xdebug 扩展第 2行命名放置分析器输出目录如果需要创建命名目标并更改其模式以允许用户对 Web 服务器进行写访问

  第 3行禁用了分析器然而第 4行将在设置 HTTP GET 或 POST 参数 XDEBUG_PROFILE 时启用分析器(如果您希望直使用分析器在第 3行代码中将 Off 更改为 _disibledevent="为 PHP 应用提速、提速、再提速!第 2 部分: 分析 PHP 应用以查找、诊断和加速运行缓慢代码" />

  找回周期

  和其他众多 PHP 扩展Xdebug 容易构建、安装快捷且易于配置 —— 所有这些工作 10 分钟内即可完成如果您已经优化了 Apache 安装并且对应用进行了缓存Cache但是性能仍然很差那么可以考虑下代码运行算法是否有效?代码是否过于复杂?是否重复实现了 PHP 已提供



  当然如果不能判断出应用瓶颈所在那么就必须进行查找并加以修复不要只凭猜测 —— 要进行分析!您可能会惊讶于宝贵计算周期是如何被轻意耗费掉

  并且永远不要忘记:要在生产服务器中禁用 Xdebug启用它总会增加系统开销



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: