Linux运维学习笔记之十六:LAMP与LNMP加速与缓存优化进阶实战

第二十六章 LAMP与LNMP加速与缓存优化进阶实战

一、PHP缓存加速器介绍

1、LAMP和LNMP优化的主要对象

LAMP是由Apache通过libphp5.so来调用PHP,LNMP是由Nginx通过fcgi(php-fpm)来调用PHP,两者的优化最后都是对PHP的优化,主要是针对一个主配置文件php.ini,Nginx可能还要对php-fpm.conf进行一下优化。

2、PHP并发低的原因

(1)PHP如果不做优化或正常优化,其并发也就只有300-1000个,原因是每次都要对程序进行编译解析。解决办法就是缓存,也就是将解析结果进行缓存,称为操作码缓存(Opcode cache)。

(2)受制于后端的数据库和存储的并发。解决办法是在数据库和存储前面缓存。

3、操作码缓存介绍

当请求一个PHP程序时,PHP引擎会解析该程序,并将它们编译为特定操作码(也就是生成可以直接运行的中间代码:一种二进制表示形式),也称为操作码(Operate Code,简写为opcode)。随后,此操作码由PHP引擎执行并丢弃。而操作码缓存将会保存这个编译后的操作码,并在一下次调用该页面时重用它,这会节省很多重复编译的时间。操作码缓存的目地是避免重复编译,减少CPU和内存开销。操作码缓存主要有eAccelerator、XCache、APC等,只需安装其中一个就行了。

4、LAMP环境PHP缓存加速器的原理

(1)Apache接收客户的PHP程序请求,并根据规则过滤之。

(2)Apache将PHP程序请求传送给PHP处理模块libphp5.so。

(3)PHP引擎定位磁盘上的PHP文件,并将其加载到内存中解析。

(4)PHP处理模块libphp5.so将PHP源代码编译成为操作码。

(5)PHP处理模块libphp5.so执行操作码,然后把操作码缓存起来。(这步就是速器要解析的)

(6)Apache接收客户端新的PHP程序请求,PHP引擎直接读取缓存执行操作码文件。

5、LNMP环境PHP缓存加速器的原理

(1)Nginx接收客户端的PHP程序访问请求。

(2)Nginx根据扩展名等过滤规则将PHP程序请求传递给解析PHP的FCGI(php-fpm)进程。

(3)PHP FPM进程调用PHP解析器读取站点磁盘上的PHP文件,并加载到内存中。

(4)PHP解析器将PHP程序编译成为操作码文件,然后把操作码缓存起来。(这步就是速器要解析的)

(5)PHP FPM引擎执行操作码后,返回数据给Ngnix,进而返回客户端。

(6)Nginx接收客户新的PHP程序请求,PHP FPM引擎就会直接读取缓存中的操作码并执行,将结果返回

6、PHP缓存加速器软件种类和选择建议
(1)操作码缓存类:

主要有eAccelerator、XCache、APC、Zend等

选择建议为在eAccelerator和XCache之间,二选一。网友测试结果是:XCache > eAccelerator.原因是XCache更快一些,且开发社区更活跃。

(2)数据库缓存类:

主要有Memcache、Redis。

(3)存储缓存类:

主要有CDN等。

二、操作码缓存加速器安装

1、LAMP/LNMP环境

软件

版本

Linux

RHEL6.4_32/CentOS6.8_64

Apache/Nginx

2.2.27/1.6.2

MySQL

5.1.72/5.5.32

PHP

5.3.27

2、检查软件环境

通过SecureCRT的交互窗口,同时操作LAMPLNMP所在的两台虚拟机。

(1)检查Linux版本

cat /etc/redhat-release

(2)检查Linux为32位还是64位

uname –m

(3)检查Apache/Nginx的版本

/application/apache/bin/apachectl –v

Server version: Apache/2.2.27 (Unix)

/application/nginx/sbin/nginx -v

nginx version: nginx/1.6.2

(4)检查PHP的版本

/application/php/bin/php –v

PHP 5.3.27 (cli) (built: Mar 5 2017 18:07:41)

(5)检查MySQL的版本

mysql -uroot –p123456

LAMP: Server version: 5.1.72 Source distribution

LNMP: Server version: 5.5.32 MySQL Community Server (GPL)

(6)查看Linux安装的包

yum grouplist

(7)查看Nginx的编译参数

/application/nginx/sbin/nginx –V

nginx version: nginx/1.6.2

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)

TLS SNI support enabled

configure arguments: --user=nginx --group=nginx--prefix=/application/nginx1.6.2 --with-http_stub_status_module--with-http_ssl_module

(8)查看Apache的编译参数

/application/apache/bin/apachectl–V  #可以查看,但不全

Server version: Apache/2.2.27 (Unix)

Architecture:   32-bit

Server MPM:     Worker

  threaded:     yes (fixed thread count)

    forked:     yes (variable process count)

Server compiled with....

 -DAPACHE_MPM_DIR="server/mpm/worker"

 -D APR_HAS_SENDFILE

...

cat/application/apache/build/config.nice  #用这个查看编译的参数

#! /bin/sh

#

# Created by configure

 

"./configure" \

"--prefix=/application/apache2.2.27" \

"--enable-deflate" \

"--enable-expires" \

"--enable-headers" \

"--enable-moules=most" \

"--enable-so" \

"--with-mpm=worker" \

"--enable-rewrite" \

"$@"

(9)查看MySQL的编译参数(免编译的查不到,只能查看编译安装的)

grep CONFIGURE_LINE /application/mysql/bin/mysqlbug

CONFIGURE_LINE="./configure  '--prefix=/application/mysql5.1.72''--with-unix-socket-path=/application/mysql5.1.72/tmp/mysql.sock''--localstatedir=/application/mysql5.1.72/data' '--enable-thread-safe-client''--with-mysqld-user=mysql' '--with-big-tables' '--without-debug''--with-pthread' '--enable-assembler' '--with-extra-charsets=complex''--with-readline' '--with-ssl' '--with-embedded-server' '--enable-local-infile''--with-plugins=partition,innobase' '--with-mysqld-ldflags=-all-static''--with-client-ldflags=-all-static'"

`test -n"$CONFIGURE_LINE"  &&echo "Configure command: $CONFIGURE_LINE"`

(10)查看PHP的编译参数

/application/php/bin/php -i | grep configure 

#LAMP:

Configure Command =>  './configure' '--prefix=/application/php5.3.27' '--with-apxs2=/application/apache/bin/apxs''--with-mysql=/application/mysql' '--with-xmlrpc' '--with-openssl''--with-zlib' '--with-freetype-dir' '--with-gd' '--with-jpeg-dir''--with-png-dir' '--with-iconv=/usr/local/libiconv' '--enable-short-tags''--enable-sockets' '--enable-zend-multibyte' '--enable-soap''--enable-mbstring' '--enable-static' '--enable-gd-native-ttf' '--with-curl''--with-xsl' '--enable-ftp' '--with-libxml-dir'

#LNMP:

Configure Command =>  './configure' '--prefix=/application/php5.3.27' '--with-mysql=/application/mysql''--with-iconv-dir=/usr/local/libiconv' '--with-freetype-dir' '--with-jpeg-dir''--with-png-dir' '--with-zlib-dir' '--with-libxml-dir=/usr' '--enable-xml''--disable-rpath' '--enable-safe-mode' '--enable-bcmath' '--enable-shmop''--enable-sysvshm' '--enable-inline-optimization' '--with-curl''--with-curlwrappers' '--enable-mbregex' '--enable-fpm' '--enable-mbstring''--with-mcrypt' '--with-gd' '--enable-gd-native-ttf' '--with-openssl''--with-mhash' '--enable-pcntl' '--enable-sockets' '--with-xmlrpc' '--enable-zip''--enable-soap' '--enable-short-tags' '--enable-zend-multibyte''--enable-static' '--with-xsl' '--with-fpm-user=nginx' '--with-fpm-group=nginx''--enable-ftp'

3、解决perl的编译问题

由于PHP的加速器主要都是perl语言写的或与perl相关,所以首先要解决perl的编译问题,防止后面在安装php加速器时,出现编译问题。通过SecureCRT的交互窗口,同时操作LAMPLNMP所在的两台虚拟机。

(1)设置环境变量

a、为了去除所有本地化的设置,保证命令能正确执行

echo "export LC_ALL=C" >> /etc/profile

b、查看是否设置成功

tail -1 /etc/profile

export LC_ALL=C

c、让设置生效

source /etc/profile 或 . /etc/profile

d、说明:

在很多的shell脚本中,我们经常会看见某一句命令的前面有一句“LC_ALL=C”,这到底是什么意思?LC_ALL=C 是为了去除所有本地化的设置,让命令能正确执行。

在Linux中通过locale来设置程序运行的不同语言环境,locale由ANSI C提供支持。locale的命名规则为<语言>_<地区>.<字符集编码>,如zh_CN.UTF-8,zh代表中文,CN代表大陆地区,UTF-8表示字符集。在locale环境中,有一组变量,代表国际化环境中的不同设置:

(i)LC_COLLATE:定义该环境的排序和比较规则

(ii)LC_CTYPE:用于字符分类和字符串处理。

控制所有字符的处理方式,包括字符编码,字符是单字节还是多字节,如何打印等。是最重要的一个环境变量。

(iii)LC_MONETARY:货币格式

(iv)LC_NUMERIC:非货币的数字显示格式

(v)LC_TIME:时间和日期格式

(vi)LC_MESSAGES:提示信息的语言。

另外还有一个LANGUAGE参数,它与LC_MESSAGES相似,但如果该参数一旦设置,则LC_MESSAGES参数就会失效。LANGUAGE参数可同时设置多种语言信息,如LANGUANE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"。

(vii)LANG:LC_*的默认值,是最低级别的设置,如果LC_*没有设置,则使用该值。类似于LC_ALL。

(viii)LC_ALL:它是一个宏,如果该值设置了,则该值会覆盖所有LC_*的设置值。

注意,LANG的值不受该宏影响。C"是系统默认的locale,"POSIX"是"C"的别名。所以当我们新安装完一个系统时,默认的locale就是C或POSIX。

(2)安装perl相关软件(perl-CPAN和perl-devel只需安一个)

yum –y install perl-CPAN 或yum –y install perl-devel

4、安装eAccelerator缓存加速模块

eAccelerator是一个自由开放源码php加速、优化和动态内容缓存的扩展模块,提高了php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。 它还有对脚本起优化作用,以加快其执行效率。使您的PHP程序代码执效率能提高1-10倍。eAccelerator的前身是truck-mmcache。缺点是开发已不够活跃。

(1)注意事项

eaccelerator-0.9.6版本的是针对PHP5.3.XX版本,如果是PHP5.2.XX版本,则会在make时报错:make ***[optimize.lo] Error 1。PHP5.2.XX应使用eaccelerator-0.9.5.2版本。其它php和eaccelerator的对应关系,参考官方文档。

(2)解压eaccelerator-0.9.6.tar.bz2

tar -jxf eaccelerator-0.9.6.tar.bz2

cd eaccelerator-0.9.6

(3)执行PHP的phpize命令

/application/php/bin/phpize

说明:php在安装第三方插件之前,一般都要执行一下该命令。phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块。

(4)configure

./configure --enable-eaccelerator=shared--with-php-config=/application/php/

bin/php-config

(5)make

make

(6)make install

make install

说明:make install后,会在相应扩展路径下生成eaccelerator.so的模块文件

LAMP路径是:/application/php5.3.27/lib/php/extensions/no-debug-zts-20090626/

LNMP路径是:/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

(7)查看生成的扩展模块:eaccelerator.so

ll /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

ll /application/php5.3.27/lib/php/extensions/no-debug-zts-20090626/

-rwxr-xr-x 1 root root 345542 Mar 16 17:21 eaccelerator.so

5、安装xcache缓存加速模块

XCache 是一个又快又稳定的 PHP opcode 缓存器.经过良好的测试并在大流量/高负载的生产机器上稳定运行. 经过(在 linux 上)测试并支持所有现行 PHP 分支的最新发布版本, 如 PHP_4_3 PHP_4_4 PHP_5_0 PHP_5_1PHP_5_2 HEAD(6.x), 并支持线程安全/Windows. 与同类 opcode 缓存器相比更胜一筹, 比如能够快速跟进 PHP 版本. XCache能够直接使用缓冲区已编译的代码从而提高速度. 通常能够提高页面生成速率2到5倍, 降低服务器负载.

(1)解压xcache-1.3.2.tar.bz2

tar jxf xcache-1.3.2.tar.bz2

cd xcache-1.3.2

(2)执行PHP的phpize命令

/application/php/bin/phpize

(3)configure

./configure --enable-xcache--with-php-config=/application/php/bin/php-config

(4)make

make

(5)make install

make install

说明:make install后,会在相应扩展路径下生成xcache.so的模块文件

LAMP路径是:/application/php5.3.27/lib/php/extensions/no-debug-zts-20090626/

LNMP路径是:/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

(6)查看生成的扩展模块:xcache.so

ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

ls /application/php5.3.27/lib/php/extensions/no-debug-zts-20090626/

eaccelerator.so  xcache.so

三、数据库缓存安装:客户端Memcache安装

1、Memcache简介

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash,它能够用来存储各种格式的数据,包括图像视频文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。MemCache分为服务端软件和客户端插件两部分:

服务端软件:memcached。本课程中使用的是memcached-1.4.3

客户端软件:memcache。本课程中使用的是memcache-2.2.5

2、MemCache的工作流程

MemCache的工作流程如下:先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现);每次更新数据库的同时更新memcached中的数据,保证一致性;当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。

3、客户端Memcache安装
(1)解压memcache-2.2.5.tgz

tar zxf memcache-2.2.5.tgz

cd memcache-2.2.5

(2)执行PHP的phpize命令

/application/php/bin/phpize

(3)configure

./configure --with-php-config=/application/php/bin/php-config

(4)make

make

(5)make install

make install

说明:make install后,会在相应扩展路径下生成memcache.so的模块文件

LAMP路径是:/application/php5.3.27/lib/php/extensions/no-debug-zts-20090626/

LNMP路径是:/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

(6)查看生成的扩展模块:memcache.so

ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

ls /application/php5.3.27/lib/php/extensions/no-debug-zts-20090626/

eaccelerator.so memcache.so  xcache.so

四、安装PDO_MYSQL扩展模块(可选,非必须安装)

PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。

1、解压PDO_MYSQL-1.0.2.tgz

tar zxf PDO_MYSQL-1.0.2.tgz

cd PDO_MYSQL-1.0.2

2、执行PHP的phpize命令

/application/php/bin/phpize

3、configure

./configure--with-php-config=/application/php/bin/php-config--with-pdo-mysql=/application/mysql

4、make

make

5、makeinstall

make install

说明:make install后,会在相应扩展路径下生成pdo_mysql.so的模块文件

LAMP路径是:/application/php5.3.27/lib/php/extensions/no-debug-zts-20090626/

LNMP路径是:/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

6、查看生成的扩展模块:memcache.so

ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

ls /application/php5.3.27/lib/php/extensions/no-debug-zts-20090626/

eaccelerator.so memcache.so  pdo_mysql.so  xcache.so

五、安装ImageMagick图像处理程序及imagick扩展模块

1、ImageMagick介绍

ImageMagick图片处理是一套功能强大、稳定而且免费的工具集和开发包,可以用来读、写和处理超过90种的图片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。[1]  利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存,对图片的操作,即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成。同时ImageMagick提供了一个高质量的2D工具包,部分支持SVG。ImageMagic的主要精力集中在性能,减少bug以及提供稳定的API和ABI上。主要功能如下:

(1)将图片从一个格式转换到另一个格式,包括直接转换成图标。

(2)改变尺寸、旋转、锐化(sharpen)、减色、图片特效

(3)缩略图片的合成图( a montage of imagethumbnails)

(4)适于web的背景透明的图片

(5)将一组图片作成gif动画,直接convert

(6)将几张图片作成一张组合图片,montage

(7)在一个图片上写字或画图形,带文字阴影和边框渲染。

(8)给图片加边框或框架

(9)取得一些图片的特性信息

(10)几乎包括了gimp可以作到的常规插件功能。甚至包括各种曲线参数的渲染功能。

2、imagick扩展模块介绍

imagick扩展模块是一个可以供PHP调用ImageMagick功能的PHP扩展。使用这个扩展可以使PHP具备和ImageMagick相同的功能。imagick插件工作需要ImageMagick软件的支持,所以必须要先安装ImageMagick,否则会报错是。

3、ImageMagick安装
(1)解压ImageMagick.tar.gz

tar zxf ImageMagick.tar.gz

cd ImageMagick-6.5.1-2

(2)configure

./configure

(3)make

make

(4)make install

make install

(5)说明:perl报错

如果没有安装 perl库,则会在make时报PerMagick/Makefile Error 2的错误。

解决办法:yum –y install perl-CPAN 或 yum –y install perl-devel

4、imagick扩展模块安装
(1)解压imagick-2.3.0.tgz

tar zxf imagick-2.3.0.tgz

cd imagick-2.3.0

(2)执行PHP的phpize命令

/application/php/bin/phpize

(3)configure

./configure --with-php-config=/application/php/bin/php-config

(4)make

make

(5)make install

make install

说明:make install后,会在相应扩展路径下生成memcache.so的模块文件

LAMP路径是:/application/php5.3.27/lib/php/extensions/no-debug-zts-20090626/

LNMP路径是:/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

(6)查看生成的扩展模块:memcache.so

ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

ls /application/php5.3.27/lib/php/extensions/no-debug-zts-20090626/

eaccelerator.so imagick.so  memcache.so  pdo_mysql.so xcache.so

六、配置PHP缓存:memcache、pdo_mysql和imagick

1、备份php.ini

cd /application/php/lib

cp php.ini php.ini.root.20170317

2、编辑php.ini
(1)修改第819行:指定extension_dir路径(注意LNMP和LAMP的路径是不同的)

LNMP:

修改前:; extension_dir = "./"

修改后:extension_dir= "/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/"

LAMP:

修改前:; extension_dir = "./"

修改后:extension_dir= "/application/php5.3.27/lib/php/extensions/no-debug-zts-20090626/"

(2)在结尾加上下面3行

extension = memcache.so

extension = pdo_mysql.so

extension = imagick.so

3、重启php(LNMP是php-fpm),让配置文件生效

LNMP:

pkill php-fpm

/application/php/sbin/php-fpm

LAMP:

pkill apache

/application/apache/bin/apachectl start

4、通过phpinfo.php查看配置是否生效

LNMP:

http://www.abc.org/phpinfo.php

LAMP:

ifconfig eth0:1 192.168.188.99/24 up

http://192.168.188.99/phpinfo.php

通过Ctrl+F在页面搜索上面三个模块。

七、配置和测试PHP操作码缓存:eAccelerator

1、配置eAccelerator的缓存目录

mkdir -p /tmp/eaccelerator

说明:

此目录是用来做缓存,可以用tmpfs内存文件系统来存储(mount到tmpfs下),也可以放在快盘上(SSD)。tmpfs是一种基于内存的文件系统,它和虚拟磁盘ramdisk比较类似像,但不完全相同,和ramdisk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储。tmpfs 的主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的。即使用了一些交换分区,性能仍然是卓越的,当更多空闲的 VM 资源可以使用时,这部分 tmpfs 文件系统会被移动到 RAM 中去。

2、对eAccelerator缓存目录授权web用户可读写

LNMP:

chown -R nginx.nginx /tmp/eaccelerator

LAMP:

chown -R httpduser.httpduser /tmp/eaccelerator

可以通过grep User/application/apache/conf/httpd.conf命令来查看apache的web操作用户

3、修改php.ini文件,通过cat追加以下内容(通过SecureCRT同时操作LNMP和LAMP)

cat >> /application/php/lib/php.ini<

[eaccelerator]

extension=eaccelerator.so

eaccelerator.shm_size="64"

eaccelerator.cache_dir="/tmp/eaccelerator"

eaccelerator.enable="1"

eaccelerator.optimizer="1"

eaccelerator.check_mtime="1"

eaccelerator.debug="0"

eaccelerator.filter=""

eaccelerator.shm_max="0"

eaccelerator.shm_ttl="3600"

eaccelerator.shm_prune_period="3600"

eaccelerator.shm_only="0"

eaccelerator.compress="1"

eaccelerator.compress_level="9"

EOF

4、查看追加是否成功

tail -20 /application/php/lib/php.ini

5、查看配置是否成功和生效(不需要重启)

/application/php/bin/php -v

PHP 5.3.27 (cli) (built: Mar 5 2017 18:07:41)

Copyright (c) 1997-2013 The PHP Group

Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies

with eAccelerator v0.9.6, Copyright (c) 2004-2010eAccelerator, by eAccelerator

6、查看/tmp/eAcceleratork下的内容(每个目录下有16个文件)

ll /tmp/eaccelerator

drwxrwxrwx 18 root root 4096 Mar 18 04:20 0

drwxrwxrwx 18 root root 4096 Mar 18 04:20 1

drwxrwxrwx 18 root root 4096 Mar 18 04:20 2

drwxrwxrwx 18 root root 4096 Mar 18 04:20 3

drwxrwxrwx 18 root root 4096 Mar 18 04:20 4

drwxrwxrwx 18 root root 4096 Mar 18 04:20 5

drwxrwxrwx 18 root root 4096 Mar 18 04:20 6

drwxrwxrwx 18 root root 4096 Mar 18 04:20 7

drwxrwxrwx 18 root root 4096 Mar 18 04:20 8

drwxrwxrwx 18 root root 4096 Mar 18 04:20 9

drwxrwxrwx 18 root root 4096 Mar 18 04:20 a

drwxrwxrwx 18 root root 4096 Mar 18 04:20 b

drwxrwxrwx 18 root root 4096 Mar 18 04:20 c

drwxrwxrwx 18 root root 4096 Mar 18 04:20 d

drwxrwxrwx 18 root root 4096 Mar 18 04:20 e

drwxrwxrwx 18 root root 4096 Mar 18 04:20 f

tree /tmp/eaccelerator

/tmp/eaccelerator

|-- 0

|   |-- 0

|   |-- 1

|   |-- 2

。。。

|-- 1

|   |-- 0

|   |-- 1

|   |-- 2

。。。

6、注意事项

如果配置了Zend,则[eaccelerator]模块段的配置必须放在Zend的内容配置前面。由于Zend仅支持到PHP5.2,所以现在一般也不会配置Zend了,可以不用考虑Zend了。

7、测试
(1)确认/tmp/eaccelerator下只有目录,没有文件(说明还没有缓存)

find /tmp/eaccelerator/ -type f

(2)通过访问动态页面phpinfo.php查看eaccelerator缓存是否生效

LNMP:

http://www.abc.org/phpinfo.php

LAMP:

http://192.168.188.99/phpinfo.php

(3)再次查看/tmp/eaccelerator目录,还是没有文件

find /tmp/eaccelerator/ -type f

(4)重启apache服务和php-fpm服务

Apache:

/application/apache/bin/apachectl graceful

Nginx:

kill -USR2 `cat /application/php/logs/php-fpm.pid`      #通过kill+信息量来重启相关服务

(5)再次通过访问动态页面phpinfo.php

LNMP:

http://www.abc.org/phpinfo.php

LAMP:

http://192.168.188.99/phpinfo.php

(6)再次查看/tmp/eaccelerator目录,出现缓存文件

find /tmp/eaccelerator/ -type f

/tmp/eaccelerator/0/5/eaccelerator-1502.1022381

八、配置和测试PHP操作码缓存:XCache

1、说明

eAccelerator和XCache有冲突,只能使用一个。该例是在Apache环境下使用XCache,所以必须将php.ini中的[eaccelerator]模块内容注释掉。

2、编辑XCache源安装目录中的xcache.ini文件

vi /wddg/tools/php-cache/xcache-1.3.2/xcache.ini

:set nu  #打开行号

(1)注释第3行的zend_extension

;zend_extension =/usr/local/lib/php/extensions/non-debug-non-zts-xxx/xcache.so

(2)注释第6行的zend_extension_ts

;zend_extension_ts = c:/php/extensions/php_xcache.dll

(3)打开第8行的xcache.so

修改前:;extension = xcache.so

修改后:extension = xcache.so

(4)修改第25行的xcache.size,指定缓存大小

修改前:xcache.size  =               60M

修改后:xcache.size  =               128M

(5)修改第27行的xcache.count,指定将 cache 切分成多少块

修改前:xcache.count =                 1

修改后:xcache.count =                 2

说明:此项根据cat /proc/cpuinfo | grep -cprocessor的结果来配置

(6)修改第31行的xcache.ttl,指定缓存生效的时间(0=永不过期)

修改前:xcache.ttl   =                 0

修改后:xcache.ttl   =                 86400

(7)修改第33行的xcache.gc_interval,指定回收的间隔

修改前:xcache.gc_interval =           0

修改后:xcache.gc_interval =           3600

(8)修改第36行的xcache.var_size,检查过期项目,回收内存空间的间隔

修改前:xcache.var_size  =           4M

修改后:xcache.var_size  =           16M

3、注释eaccelerator

;[eaccelerator]

;extension=eaccelerator.so

;eaccelerator.shm_size="64"

;eaccelerator.cache_dir="/tmp/eaccelerator"

;eaccelerator.enable="1"

;eaccelerator.optimizer="1"

;eaccelerator.check_mtime="1"

;eaccelerator.debug="0"

;eaccelerator.filter=""

;eaccelerator.shm_max="0"

;eaccelerator.shm_ttl="3600"

;eaccelerator.shm_prune_period="3600"

;eaccelerator.shm_only="0"

;eaccelerator.compress="1"

;eaccelerator.compress_level="9"

4、将XCache源安装目录中的xcache.ini文件内容拷贝到php.ini最后面

cat /wddg/tools/php-cache/xcache-1.3.2/xcache.ini >> /application/php/lib/php.ini

5、检查配置是否成功

/application/php/bin/php -v

6、重启apache服务

/application/apache/bin/apachectl graceful

你可能感兴趣的:(Linux)