您的位置:首页 > 编程语言 > PHP开发

调优 PHP

2015-08-14 09:26 627 查看
调优 PHP
PHP 是运行应用程序代码的引擎。应该仅安装计划使用的那些模块,并配置您的 Web 服务器,使之仅为脚本文件(通常是以 .php 结尾的那些文件)使用 PHP,而非所有静态文件。
操作码缓存
请求一个 PHP 脚本时,PHP 会读取该脚本,并将其编译为 Zend 操作码,这是要执行的代码的一种二进制表示形式。随后,此操作码由 PHP 执行并丢弃。操作码缓存将保存这个编译后的操作码,并在下一次调用该页面时重用它。这会节省很多时间。有多种缓存可用,我比较常用的是 eAccelerator。
要安装 eAccelerator,您的计算机上需要有 PHP 开发库。由于不同的 Linux 发布版存放文件的位置不同,所以最好直接从 eAccelerator 的 Web 站点获得安装说明(参见 参考资料 部分获得链接)。您的发布版也有可能已经包含了一个操作码缓存,只需安装即可。
无论如何在系统上安装 eAccelerator,都有一些配置选项需要注意。配置文件通常是
/etc/php.d/eaccelerator.ini。eaccelerator.shm_size 定义共享高速缓存的大小,编译后的脚本就存储在
这里。该值的单位是兆字节(MB)。根据您的应用程序确定恰当的大小。eAccelerator
提供了一个脚本来显示缓存的状态,其中包含内存占用,64MB
是个不错的选择(eaccelerator.shm_size="64")。如果您选择的值未被接受,那么必须修改内核的最大共享内存的大小。向
/etc/sysctl.conf 添加 kernel.shmmax=67108864,运行 sysctl
-p 来使设置生效。kernel.shmmax 值的单位是字节。
如果共享内存的分配超出极限,eAccelerator
必须将旧脚本从内存中清除。默认情况下,这是被禁用的;eaccelerator.shm_ttl = "60" 指定:当 eAccelerator
用完共享内存时,60 秒内未被访问的所有脚本都将被清除。
另一种流行的 eAccelerator 替代工具是 Alternative PHP Cache(APC)。Zend 的厂商也提供了一种商业操作码缓存,包括一个进一步提高效率的优化器。
php.ini
PHP 的配置是在 php.ini 中完成的。四个重要的设置控制 PHP 可使用多少系统资源,如表 1 所列。
表 1. php.ini 中与资源相关的设置

设置描述建议值
max_execution_time一个脚本可使用多少 CPU 秒30
max_input_time一个脚本等待输入数据的时间有多长(秒)60
memory_limit在被取消之前,一个脚本可使用多少内存(字节)32M
output_buffering数据发送给客户机之前,有多少数据(字节)需要缓存4096
具体数字主要取决于您的应用程序。如果要从用户处接收大文件,那么 max_input_time 可能必须增加,可以在
php.ini 中修改,也可以通过代码重写它。与之类似,CPU
或内存占用较多的程序也可能需要更大的设置值。目标就是缓解超标程序的影响,因此不建议全局禁用这些设置。关于 max_execution_time,
还有一点需要注意:它表示进程的 CPU 时间,而不是绝对时间。因此一个进行大量 I/O
和少量计算的程序的运行时间可能远远超过 max_execution_time。这也是 max_input_time 可以大
于 max_execution_time 的原因所在。
PHP
可执行的日志记录数是可配置的。在生产环境中,禁用除最重要的日志以外的一切日志记录能够减少磁盘写操作。如果需要使用日志来排除问题,那么可以按需启用
日志记录。error_reporting =
E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR 将启用足够的日志记录,使您发现问题,同时从脚本中消除大量无用的内容。

结束语
本文重点探讨 Web 服务器的调优,包括 Apache 和 PHP。对于 Apache,总体的想法是消除 Web
服务器必须执行的多余检查,例如处理 .htaccess 文件。还必须调优所用的多处理模块,以便在使用的系统资源和可供传入请求使用的空闲
worker 之间找到平衡。对于
PHP,最好的事情就是安装一个操作码缓存。密切注意几个资源设置也能确保脚本不会浪费系统资源,不会减慢系统处理其他任务的速度。
本系列的下一篇也是最后一篇文章将介绍 MySQL 数据库的调优。请继续关注!
参考资料
学习
您可以参阅本文在 developerWorks 全球网站上的 英文原文。

“使用应用程序跟踪对性能改变进行量化分析 ” (developerWorks,2006 年 8 月)介绍了如何利用应用程序追踪来展示 Apache 配置更改的效果。

“PHP V5.2 中的新增功能,第 1 部分: 使用新的内存管理器 ”(developerWorks,2007 年 4 月)涵盖了 PHP 5.2 在内存处理方面的最新变化。PHP 一直在不断优化其对系统资源的使用。

mod_deflate 是一个 Apache 模块,可动态压缩输出。在 PHP 中也可通过 输出压缩 实现这种功能。

预缓存将压缩 JavaScript 代码之类的静态文件。CSS 是提高性能的另一种途径。压缩和连接所有 JavaScript 代码及 CSS 就更好了。

介绍 多处理模块 的 Apache 文档值得一读,可从中了解各模块的功能性,单击相应链接可查看所选 MPM 的具体文档。

在 developerWorks 中国网站 Linux 专区 可找到针对 Linux 开发人员的更多资源。

随时关注 developerWorks 技术活动 和 网络广播。

获得产品和技术
如果您的发布版不包含 eAccelerator,Install From Source 说明会对您有所帮助。

Alternative PHP Cache 和 Zend Platform 是 eAccelerator 的替代工具。

Siege 使您可以模拟用户,以便了解站点能够处理多少流量。

您迟早会打算缓存站点的某些元素,并将负载分布到多个 Web 服务器上。Squid 的加速器模式(也称为反向代理)或 Linux Virtual Server Project 都是不错的工具。

订购 SEK for Linux,这有两张 DVD,包含用于 Linux 的最新 IBM 试用软件,包括 DB2、Lotus、Rational、Tivoli 和 WebSphere。

利用可从 developerWorks 直接下载的 IBM 试用版软件 构建您的下一个 Linux 开发项目。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: