在CentOS中编译安装eAccelerator

目前我的Blog和NMM都运行在Linux + Nginx + MySQL + PHP架构上,辅以memcached进行一些缓存。

为了加速PHP,最近尝试着往服务器上装了eAccelerator,于是就把安装过程记录下来,防止忘记。

eAccelerator是一款免费开源的PHP加速器,其原理是使用共享内存存储PHP中间码,来避免每次执行时重复进行的脚本解析和编译工作,从而提高执行速度。官方标称其可以使PHP加速1-10倍。实际上我使用之后,确实感到PHP的速度有了大幅提高(虽然不知道是不是有“1-10倍”)。eAccelerator的安装调试其实很简单,网上的文章也很多(比如Michael的《给PHP加速,eAccelerator配置和使用指南》,介绍非常详细,很有参考学习价值),官方的文档也有描述。不过Michael的文章写于5年前,当时还是PHP5.1,eAccelerator也有了发展,于是写一篇自己的笔记。

本文初稿写于2013年3月5日。3月6日编辑修改部分错字。转载请注明作者和出处,并附上原文链接。

作者:dgwxx 源自:《在CentOS中编译安装eAccelerator》

0.安装环境

eAccelerator兼容大多类UNIX系统,官方文档描述其可以被安装在Linux、FreeBSD、OpenBSD、Mac OS X、Solaris、AIX和HP-UX上。Blog和NMM均使用CentOS 6,eAccelerator可以顺利安装使用。

从源代码编译安装eAccelerator需要以下环境:

php4 或 php5
autoconf
automake
libtool
m4

由于eAccelerator需要申请共享内存,因此其不能在cgi或cli模式中使用,只能安装在mod_php和fastcgi模式安装的php中。

1.编译与安装

先说一下笔者的服务器环境。操作系统为CentOS 6,web服务器为nginx 1.2.7,配合通过phpfpm运行于fastcgi模式的php 5.4.12。

eAccelerator项目的官方网址是http://eaccelerator.net/,源代码目前托管于GitHub。由于我国特殊国情和某个火车票骗子的功劳继sf之后GitHub也惨遭毒手,先是受到火车票骗子制造的巨大流量的冲击,又牵连受到“相关部门”注意以致连接被reset,然后https访问又受到疑似问题证书攻击(https中间人?),墙内盆友请八仙过海各显神通。

源代码目前有两个途径可以获取,分别是RealeaseSource。Release的版本是0.9.6.1,已经有一段时间没有更新。开发版的base branch ( Master ) 的latest commit是42067ac7e2(装好之后版本号显示1.0-dev),本文执笔时最后更新是2012年。出于版本强迫症我用了开发版的代码。

关于版本的选择需要说明的是,0.9.6之前的版本具有session handler、key/value存储等缓存功能,而包括0.9.6之后的版本这些功能已经被全部移除无法使用。部分PHP代码的缓存组件基于老版本eAccelerator API开发,可能会用到key/value存储。这些代码运行于新版eAccelerator会出现错误(如phpbb的eAccelerator缓存组件)。安装前请先确认使用什么版本的eAccelerator。

目前最新开发版 ( Master ) 的代码的tar包可以从:https://github.com/eaccelerator/eaccelerator/archive/master.tar.gz下载到。

wget https://github.com/eaccelerator/eaccelerator/archive/master.tar.gz

下载好后解压缩并进入目录:

tar -zxf eaccelerator-master.tar.gz cd eaccelerator-master

在这里你需要清楚你的PHP的安装目录,CentOS一般在/usr/local/php下,如果不知道可以在phpinfo中看到。

/usr/local/php/bin/phpize ./configure –enable-eaccelerator=shared –with-php-config=/usr/local/php/bin/php-config make make install

里面的/usr/local/php需要改成你的PHP安装目录。

install之后eAccelerator扩展会被安装到php的扩展目录中。在php 5.4中这个路径会是:

/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/eaccelerator.so

其中红色部分是PHP扩展API的build,php 5.3应该是20090626,php 5.4是20100525,不同版本的php可能不同,如果实在不知道可以看phpinfo中extension_dir这一项。

2.加载与设定

编译安装好eAccelerator组件后,接下来就是要将其加载进php。加载方法有两种,一种是作为zend extension进行加载,还有一种是作为php extension进行加载。后者我没有试过,这里就前者进行说明。

要作为zend extension加载eAccelerator,应在php.ini中加入如下语句(引自官方文档):

zend_extension=”/usr/lib/php4/eaccelerator.so” eaccelerator.shm_size=”16″ eaccelerator.cache_dir=”/tmp/eaccelerator” eaccelerator.enable=”1″ eaccelerator.optimizer=”1″ eaccelerator.check_mtime=”1″ eaccelerator.debug=”0″ eaccelerator.filter=”” eaccelerator.shm_ttl=”0″ eaccelerator.shm_prune_period=”0″ eaccelerator.shm_only=”0″

以zend extension加载eAccelerator讲究比较多,首先zend_extension字段必须为eaccelerator.so的绝对路径,如果你的PHP是thread safe则不能用zend_extension而需要用zend_extension_ts来加载。如果你不知道你的php.ini在哪,或者系统中四处散落了很多php.ini而不知道实际上系统用了哪个,可以看phpinfo中的Loaded Configuration File这一项。

配置完php.ini后我们姑且需要验证eAccelerator是否正常工作,然后再进行性能优化和设置。为此,我们首先需要建立磁盘缓存目录。磁盘缓存路径可以通过上述配置文件的eaccelerator.cache_dir项进行指定。默认配置文件中将磁盘缓存被放在了/tmp中,而这个目录在一些系统中会随着系统重启而被清空,所以我们可以将磁盘缓存放在别的目录中。

官方文档中表示/var/cache/eaccelerator是个不错的选择,这里我们按文档的推荐用/var/cache/eaccelerator。

zend_extension=”/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/eaccelerator.so” eaccelerator.shm_size=”16″ eaccelerator.cache_dir=”/var/cache/eaccelerator” eaccelerator.enable=”1″ eaccelerator.optimizer=”1″ eaccelerator.check_mtime=”1″ eaccelerator.debug=”0″ eaccelerator.filter=”” eaccelerator.shm_ttl=”0″ eaccelerator.shm_prune_period=”0″ eaccelerator.shm_only=”0″

然后建立/var/cache/eaccelerator这个目录,并赋予其权限。最懒惰的方法是给他0777,所有用户都对其可写。如果你不熟悉linux操作,或只是想图省事搭建一下开发环境,你完全可以这么做。

mkdir /var/cache/eaccelerator chmod 0777 /var/cache/eaccelerator

不过,按照权限最小化原则,最好在生产环境中将这个目录的所有权归属web服务器(或fastcgi服务器)的用户,将权限限制为0644。如果你是以模块方式在apache中运行php则需要将目录所有权归属运行apache的用户。在不同环境中,运行服务器的用户可能叫“web”、“www”或“apache”等等,如果不清楚请用top命令查看:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1229 web 16 0 82284 37m 28m S 0.0 7.3 1:41.44 php-fpm 14292 web 15 0 18068 12m 916 S 0.0 2.4 0:03.80 nginx

在本文环境中,php以php-fpm运行,而php-fpm和nginx都以web用户运行,所以我们要将这个目录交给运行php-fpm的用户(既web用户):

mkdir /var/cache/eaccelerator chown web /var/cache/eaccelerator chmod 0644 /var/cache/eaccelerator

3.测试运行

建好目录之后,我们就可以重启php-fpm(或Apache或Lighttpd等等),查看eAccelerator是否正常运行。

重启http服务器(或fastcgi服务器)后刷新phpinfo,如果出现eAccelerator的小节且版权部分有如下提示就说明安装成功:

Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
with eAccelerator v1.0-dev, Copyright (c) 2004-2012 eAccelerator, by eAccelerator

接下来就是按照服务器的状况进行参数设定和性能优化了。这部分计划另写一篇文章进行讲解。

4.写在最后

在最后,希望大家再次回想一下本文开头提到的eAccelerator为php提速的原理。eAccelerator能为php提速的最大原因在于其节省了php脚本重复解析、编译的时间,而不是加速网站数据处理的速度。如果您使用PHP进行大量的数据处理,比如对一个很大的数组进行操作,或使用GD库处理很多图片,或者性能瓶颈根本不在php(而在数据库等环节),那eAccelerator对您的帮助可能微乎其微。提升网站性能需要首先对网站的架构和系统整体有全面的认识,才能做到消除瓶颈、提升性能。

希望本文对您有所帮助。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注