调优 PHP

调优 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 开发项目。

讨论

通过参与 developerWorks blog 加入 developerWorks 社区。

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2015-08-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏finleyMa

说下browserslist

browserslist 是一个开源项目 见到有些package.json里会有如下的配置参数

4351
来自专栏java一日一条

关于 Web 缓存的那些风流事儿

最近大家针对preload、HTTP/2 push和ServiceWorker的浏览器缓存实现展开了激烈的讨论,而这也引起了很多人的疑惑。

792
来自专栏企鹅号快讯

10 个技巧促使你的 Git 的技能上一个台阶——SitePoint

第一时间关注程序猿(媛)身边的故事 最近,我们发布了一些教程促使你了解 Git 基础知识和在团队环境中使用 Git。谈论的指令已经足够帮助一个开发者在 Git ...

1878
来自专栏GopherCoder

ReStructuredText 文档编写全攻略编写文档说明

2703
来自专栏Grace development

运行/调试你的PHP代码

没有任何一名程序员可以一气呵成、完美无缺的在不用调试的情况下完成一个功能或模块。调试实际分很多种情况。本篇文章我分享下自己在实际开发工作中的经验,我个人理解,调...

2502
来自专栏SDNLAB

RYU多控制器通信

2436
来自专栏WeTest质量开放平台团队的专栏

Linker加载so失败问题分析

原文链接:https://wetest.qq.com/lab/view/421.html

1371
来自专栏情情说

RabbitMQ实战:消息通信模式和最佳实践

通过前2篇的介绍,了解了消息通信的主要元素和交互过程,以及如何运行和管理RabbitMQ,这篇将站在开发模式的角度理解「面向消息通信」带来的好处,以及在各种场景...

5445
来自专栏腾讯云数据库(TencentDB)

CynosDB的计算层设计优化揭秘——兼容PostgreSQL版

CynosDB 是腾讯数据库研发团队推出的自研数据库,有PostgreSQL和MySQL两个版本。本文以兼容PostgreSQL版CynosDB为例,介绍我们的...

15.2K4
来自专栏北京马哥教育

Linux的10个最危险的命令

Linux命令行佷有用、很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候。

1612

扫码关注云+社区

领取腾讯云代金券