第5章

    优化测试LAMP

    现在我们已经完成了Linux、Apahce、MySQL和PHP的安装。接下来的任务就是要让LAMP稳定地运作起来。本章先从创建虚拟主机和使用MySQL数据库开始,进行对LAMP平台的基础测试。然后重点分析PHP缓存器的安装和配置,以便对LAMP的性能进一步优化。

    第1节 安装Apache虚拟主机

    为展开LAMP的优化测试,我们需要确保Apache正常运行。为确保测试环境的相对独立性,我们将建立一个虚拟主机来进行测试。创建虚拟主机只需要对Apache的配置文件httpd.conf进行修改即可。

    先创建一个基于域名的虚拟主机,例如http://www.lamp.com。它将直接指向到/usr/local/apache/htdocs/lamp/目录下。根据以下步骤进行操作:

    ●具体的配置细节我们在第三章已经有描述。我们只需要在配置文件中添加如下内容:

    第5章优化测试LAMP - 图1

    并确保NameVirtualHost * :80没有被注释。

    ●重新启用Apache服务器。

    ●为确保本测试顺利进行,我们手动设定lamp域名解析到本地。

    第5章优化测试LAMP - 图2

    ●然后创建一个helloworld.htm。

    第5章优化测试LAMP - 图3

    ●打开浏览器输入http://www.lamp.com,如果能显示出helloworld那恭喜你,说明虚拟主机创建成功。

    第2节 准备MySQL数据库和用户

    创建一个MySQL数据库lamp_database和一个单独的具备此数据库管理权限的用户,用户名和密码分别为:lamp_user、lamp_passwd。首先登陆MySQL数据库。

    第5章优化测试LAMP - 图4

    至此,数据库和用户准备完毕。

    第3节 测试Apahche,PHP和MySQL

    1.数据库连接

    现在编写PHP程序,我们直接采用如下脚本供大家使用:

    第5章优化测试LAMP - 图5

    将connect.php拷贝到/usr/local/apache/htdocs/lamp/connect.php。

    用浏览器访问:http://www.lamp.com/connect.php如出现“连接成功”字样,则说明LAMP正常工作了。

    2.数据插入

    要测试数据库的插入,我们首先需要在lamp_database中建立数据表,如下所示:

    第5章优化测试LAMP - 图6

    现在我们创建了一个包含有id和name字段的数据表test。其中id是自动增长。然后我们创建以下PHP脚本:

    第5章优化测试LAMP - 图7

    同样用浏览器访问http://www.lamp.com/insert.php。

    3.数据提取

    现在我们开始将针对已经进行数据插入操作的数据表进行数据读取操作,同样我们先编写以下脚本:

    第5章优化测试LAMP - 图8

    然后再用浏览器访问http://www.lamp.com/read.php。

    到目前为止,针对虚拟主机的PHP和MySQL功能测试已经完成,现在我们开始考虑系统的运行效率。目前除了可以针对LAMP本身进行优化配置之外,我们还可以采用各种的缓存引擎(caching engines)来提高PHP的执行速度。为了更好地了解这是如何工作的,我们快速查看一下PHP在执行脚本时所经历的过程。与任何脚本语言一样,代码在执行前都会被分析并从可供人读的格式转换为一系列可由机器识别的指令。在PHP中,这一过程是由Zend Engine Parser执行的,它将一个脚本转换为所谓的操作码。然后这些操作码被传递给执行器,它解译这些指令并执行所要求的操作。但是,大部分应用程序常常加载不同的PHP脚本库、类等,从而对脚本的所有外部组件及其子组件的编译和执行的过程会重复进行。

    因此我们将采用共享缓存处理操作码,以尽量减少重复性的工作。接下来逐个介绍目前应用广泛的五种方案。

    第4节 Alternative PHP Cache

    APC(Alternative PHP Cache)的简称,是来自Community Connect的一个免费缓存模块。这个产品已经具有足够的稳定性供正式场合使用,而且它看起来也能在很大程度上提高响应请求的速度。APC将操作码放入共享内存中来等待下一个访问连接,因此大大减少了对硬盘访问的开销,从而提高了PHP的访问速度。

    APC可以以DSO(动态共享组件)方式安装,也可以作为静态模块编译进PHP。下文我们重点介绍DSO方式,因为这样就不需要你重新编译PHP,而且卸载也很方便。

    1.安装APC

    最新版的APC及相应文档,教程和更新日志可以在:http://tech.lupaworld.com/lamp/下载。截至2006年6月,最新稳定版本号是3.0.10。假设该软件放置在/root/soft/中,接下来我们将对APC-3.0.10.tgz进行操作。

    ●解压到/usr/local目录。

    第5章优化测试LAMP - 图9

    ●进入源码目录,使用phpize检查PHP安装的相关参数并创建configure文件。

    第5章优化测试LAMP - 图10

    ●运行完成后,我们将采用configure指定apxs和php-config的路径并创建MakeFile文件。

    第5章优化测试LAMP - 图11

    ●然后进行编译和安装。

    第5章优化测试LAMP - 图12

    ●此时,apc.so将出现在PHP的extensions目录中,然后修改php.ini文件,增加对apc.so的引用。

    第5章优化测试LAMP - 图13

    ●重新启动Apache即完成APC的安装。

    2.配置APC

    在大多数情况下,默认的APC配置已经可以满足要求。假如需要APC更好地根据系统需求和硬件情况充分发挥出性能,那我们可以在php.ini中使用如下指令:

    第5章优化测试LAMP - 图14

    3.删除APC

    删除APC只需在php.ini中将apc.so注释即可。

    第5章优化测试LAMP - 图15

    第5节 eAccelerator

    eAccelerator是一个和APC类似的对操作码进行处理的缓存引擎。它是PHP4中的Turck MMCache发展出来的一个分支程序。官方站点地址http://eaccelerator.net/。目前最新稳定版本是0.9.4。我们可以去站点

    http://tech.lupaworld.com/lamp/down.php? id=eaccelerator-0.9.4.tar.bz2下载eaccelerator-0.9.4.tar.bz2,放在/root/soft目录中。然后开始我们安装过程。

    1.安装eAccelerator

    ●解压缩。

    第5章优化测试LAMP - 图16

    ●进入源码目录,使用phpize检查PHP安装的相关参数并创建conigure文件。

    第5章优化测试LAMP - 图17

    ●运行完成后,我们将采用configure指定apxs和php-config的路径并创建MakeFile文件。

    第5章优化测试LAMP - 图18

    ●然后进行编译和安装。

    第5章优化测试LAMP - 图19

    ●创建缓存目录并修改权限以便Apache的用户有权限操作。

    第5章优化测试LAMP - 图20

    ●此时,eaccelerator.so将出现在PHP的extensions目录中,然后修改php.ini文件,增加对eaccelerator.so的引用。

    第5章优化测试LAMP - 图21

    ●重新启动Apache即完成eAccelerator的安装。

    2.配置eAccelerator

    同APC一样,eAccelerator也支持指令参数来控制它的行为。以下是各个指令的用法:

    第5章优化测试LAMP - 图22

    3.删除eAccelerator

    同样,删除一个扩展只需要在php.ini中对此扩展进行注释即可。

    第5章优化测试LAMP - 图23

    当然为了彻底地删除此扩展,我们可以到php的extensions目录中将eaccelerator.so删除。

    第6节 Zend Optimizer

    Zend Optimizer是由PHP核心引擎“Zend”创建者Zend技术公司所开的免费PHP优化软件。据Zend公司透露使用这个软件某些情况下至少可以提高性能30%以上。我们可以在http://www.zend.com/products/zend_optimizer获得相关介绍信息。对应PHP5.x的最新稳定版是3.0.0。下载地址:http://tech.lupaworld.com/lamp。

    1.安装Zend Optimizer

    Zend Optimizer的安装很简单,我们将下载到的ZendOptimizer-3.0.0-linux-glibc21-i386.tar.gz放置在/root/soft/目录中。

    ●解压缩。

    第5章优化测试LAMP - 图24

    ●然后进入解压目录执行内置的自动安装的向导脚本。

    第5章优化测试LAMP - 图25

    ●根据它的提示进行操作。通常采用默认设置即可。在此过程中该脚本会备份php.ini文件,并将创建php.ini的符号链接到Zend Optimizer的安装目录中。并指定此文件作为php的配置文件。

    2.配置Zend Optimizer

    下面介绍针对Zend Optimizer的各个指令的用法:

    第5章优化测试LAMP - 图26

    3.删除Zend Optimizer

    首先删除在安装过程中创建的php.ini的符号链接。然后将php.ini的备份还原,重新启动Apache即可。当然也可以彻底删除掉Zend Optimizer的安装目录。

    第7节 JPCache

    JPCache是采用PHP编写的一个缓存引擎方案,它不同于APC或者eAccelerator。JPCache不需要采用DSO或者编译成静态模块进行安装。它只需要在PHP的代码里使用include或者require方式调用即可。

    1.安装JPCache

    JPCache官方站点地址是http://www.jpcache.com/。目前最新稳定版本是jpcache v2。我们从这里下载http://tech.lupaworld.com/lamp/保存到/root/soft/目录中。

    ●解压缩处理。

    第5章优化测试LAMP - 图27

    ●配置includedir。

    第5章优化测试LAMP - 图28

    ●配置jpcache的类型,目前支持file和mysql。

    第5章优化测试LAMP - 图29

    ●创建缓存目录。

    第5章优化测试LAMP - 图30

    ●测试。我们编写以下PHP程序进行测试。

    第5章优化测试LAMP - 图31

    ●将此页面保存到/usr/local/apache/htdocs/lamp/目录中。

    ●用浏览器打开http://www.lamp.com/testjpcache.php。在不断的刷新访问过程中,如果显示的时间保持不变则说明jpcache生效了。

    2.配置JPCache

    下面介绍针对Zend Optimizer的各个指令的用法:

    第5章优化测试LAMP - 图32

    3.删除JPCache

    要取消JPCache只需在PHP代码中去掉对jpcache.php的引用即可。

    第8节 memcached

    和APC或者JPCache等已经介绍过的以处理输出为主要方式的的缓存引擎不同,memcached主要是缓存程序中的各个对象来实现对访问的加速。memcached官方站点地址:http://www.danga.com/memcached/。目前最新稳定版是memcached-1.1.12.tar.gz。我们可以从这里下载:http://tech.lupaworld.com/lamp/保存到/root/soft目录。

    1.安装memcached

    ●解压缩。

    第5章优化测试LAMP - 图33

    ●编译安装。

    第5章优化测试LAMP - 图34

    ●启动memcached服务程序。分配给memcached128M内存,在IP为127.0.0.1的10101端口监听。

    第5章优化测试LAMP - 图35

    ●现在memcached已经启动成功。我们将使用memcached的PHP扩展来调用这个功能。先到http://peel.php.net/package/memcached下载最新稳定版也可以到http://tech.lupaworld.com/lamp/去下载。memcached-2.0.4.tgz保存到/root/soft目录中。

    ●解压缩处理。

    第5章优化测试LAMP - 图36

    ●编译安装。

    第5章优化测试LAMP - 图37

    ●修改php.ini文件,增加对memcached.so的支持。

    第5章优化测试LAMP - 图38

    ●重新启动Apache。至此memcached配置完毕。

    2.使用memcached

    memcached的使用发放与之前介绍的缓存模块完全不同,它将采用代码嵌入的方式进行调用,以下先介绍各个函数,并以一个小例子来说明。

    第5章优化测试LAMP - 图39

    以下是一个简单的实例。

    第5章优化测试LAMP - 图40

    执行后将得到以下结果:

    第5章优化测试LAMP - 图41

    3.删除memcached

    正如其他的基于DSO方式安装的缓存引擎一样。我们可以迅速的取消对它的使用。包括在php.ini文件中注释掉对memcached.so的使用,然后重启Apache。再结束memcached的进程,并删除memcached安装目录。

    第9节 如何选用缓存引擎

    是否可以混用以上介绍的各种缓存引擎来发挥更大的性能?JPCache和memcached是可以很好地同时工作,因为他们的工作原理不同。但是APC,eAccelerator和Zend Optimizer却存在一定的问题。通常建议只使用一种缓存引擎。首先我们需要分析系统需求,根据实际情况来确认所需要的PHP缓存引擎。假如程序中包含了大量的对象、频繁地从数据库中读取和存储数据,那么memcached比较适合这种情况。假如站点中包含了大量的静态页面,基本上不存在动态执行程序那么使用JPCache最为合适。假如数据层不是性能瓶颈,但是在PHP脚本执行时可能会造成部分影响,那么所有基于操作码级别的缓存引擎都可以采用。假如实在无法确定采用何种缓存引擎,那么使用APC是最为安全的解决方案。