一 PHP缓存加速介绍与环境介绍

1 PHP缓存加速介绍

1 操作码

操作码是PHP编译后的一个中间文件,是一个字节码。 nginx 并发最大万 ,PHP并发次之几百 ,mysql最小 几百,想要网站的并发增大,首先需要优化的是PHP和mysql。 PHP的解析时在服务端的在解析PHP语言时会生成一个特定的操作码,默认情况下PHP将程序执行后就会删除此操作码,而操作码缓存的原理是将编译后的操作码保存下来,并放入到共享内存中,以便在下次调用该PHP页面时重用他,避免了相同代码的重复编译,节省了PHP引擎重复编译的时间,降低了服务器负载,同时减少了CPU和内存开销

2 PHP操作码缓存原理图

互联网企业最大的瓶颈是PHP和mysql的瓶颈 流程说明: 1 nginx 接受客户端的PHP程序访问请求 2 nginx根据扩展名等过滤规则将PHP程序请求传递给解析PHP的fcgi进程(php-fpm) 3 PHP fpm 进程调用PHP解析器读取站点磁盘上的PHP文件,并加载到内存中 4 PHP解析器将PHP程序编译成opcode文件,然后将opcode缓存起来 5 PHP fpm引擎执行opcode之后,返回数据给nginx,进而返回给客户端 6 nginx收到新的PHP请求时,PHP fpm引擎就会直接读取缓存中的opcode并执行,将结果返回。

3 PHP加速器的种类

1 xcache 2 eaccelerator 3 APC 4 zendopcache 选择方式:通过自己将平台打好进行压力测试,选择自己最合适的

建议: 1 首选xcache,原因是效率好,快,社区活跃支持更高的版本 2 次选eaccelerator,原因,安装配置简单,加速效果更高,文档资料多,但官方不活跃,仅适合于PHP版本5.4以下的程序 3 再选则zendopcache,原因是PHP官方颜值,发展潜力好,PHP5.5之前可以通过zendopcache软件以插件扩展的方式安装,从PHP5.5版本开始已经整合到PHP软件中,编译时只需要指定相关参数即可 4 APC 了解内容

二 实验环境搭建

软件包: 链接:https://pan.baidu.com/s/1LZvqZcjC5tgbL29dRv1N-Q 密码:ec45

1 安装并配置PHP

2 安装并配置nginx

3 配置nginx支持PHP

4 测试

三 缓存加速器的安装

1 eaccelerator 安装与加载

1 eaccelerator 缓存加速软件说明

免费的、开源的PHP加速、优化及缓存的扩展插件软件,可以缓存PHP程序编译后的中间代码opcode、session数据等,降低PHP程序在编译解析时对服务器的性能开销,其还可以加快PHP程序执行的速度,降低服务器负载压力,是PHP程序代码执行效率更高。

2 基本原理

eaccelerator 会把编译好的PHP程序存放在共享内存中。然后每次从内存中调用执行。

2 xcache 安装与加载

1 xcache 缓存加速软件说明

开源、稳定的PHP opcode缓存优化器。

2 原理

xcache把PHP程序编译后的数据opcode缓存到共享内存中,表面相同的程序重复执行。用户请求数据时,可以直接使用缓存中的数据,提高PHP的访问速度,通常可以提高2-5倍。

3 znedopcache 安装

1 zendopcache 插件说明

是PHP官方为适应市场需要而开发的一款软件,在PHP5.5 之前,需要手工进行编译,但在5.5之后,只需要在编译PHP的时候加上 --enable-opcache就行了。

4 PHP memcached 扩展插件的安装

1 memcached 缓存流程图

2 memcached 工作步骤如下:

1 程序首先检查客户端请求的数据在memcached 服务的缓存中是否存在,如果存在,直接把请求的数据返回,不再请求后端数据库 2 如果请求的数据在memcached缓存中不存在,则程序会去memcached后端的数据库服务器服务 3 把从数据库中取到的数据返回给客户端 4 同时把新取到的数据缓存一份到memcached服务器缓存中,下次同样的请求就直接从memcached服务缓存返回数据,从而减轻数据库的访问压力

5 安装插件PDO_MYSQL扩展模块

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

6 安装图形化扩展模块

1 安装依赖模块

2 安装解压包

3 安装imagemagick

是一款强大而且稳定的免费的工具集和开发包,可以用来读、写和处理超过89中基本格式的图片文件。

4 安装imagick

imagick 插件需要imagemagick软件的支持,所以必须先安装上述软件。 imagick插件是一个可以提供PHP调用imagemagick功能的扩展模块,使用这个扩展模块可以使PHP具备和imagemagick相同的功能。

5 查看

7 基础总结

此中模块中的作用是一致的,每次只能安装一个 此中模块的功能是一致的。用于实现同样的功能 此模块是用于链接数据库 配置上述模块生效的方式,如果有/etc/php.d 则添加 其默认读取文件

如果没有/etc/php.d 则 通过在php.ini中添加 此处如果不配置。则下面的模块指定的是模块的绝对路径,如果配置,则指定的是模块的相对路径,其中其路径是在make install 模块时生成的路径

如果添加,则需要重启才能完成,此处我已经配置完成,因此可以直接查看

四 缓存加速器优化实战

1 配置eaccelerator 生效

1 基本配置与加载

2 参数相关配置

方法一 ,在没有/etc/php.d 的情况下配置:

方法二: 在有.etc/php.d中的配置 参数解释: eaccelerator.shm_size="64" eAccelerator 可以使用的共享内存的数量 (以兆为单位) . "0" 是指操作系统的默认值. 默认值是 "0".可根据服务器的实际情况来调整,16,32,64,128都是可以的。 eaccelerator.cache_dir="/tmp/eaccelerator" 这个目录是给磁盘缓存使用. eAccelerator 在这里储存预先编译好的代码, 进程数据, 内容以及用户的自定义内容. 同样的数据也能被储存在共享内存中 (这样可以提高访问速度). 默认的设置是 "/tmp/eaccelerator".

eaccelerator.enable="1" 开启或关闭 eAccelerator。"1" 为开启,"0" 为关闭。默认值为 "1"。

eaccelerator.optimizer="1" 启或关闭内部优化器,可以提升代码执行速度。"1" 为开启,"0" 为关闭。默认值为 "1"。

eaccelerator.check_mtime="1" 打开或者关闭 PHP 的文件修改检查. "1" 是指打开, "0" 是指关闭. 如果您在修改以后重新编译 PHP 的文件,那么您应当设置为 "1". 默认值是 "1".

eaccelerator.debug="0" 开启或关闭调试日志记录。"1" 为开启,"0" 为关闭。默认值为 "0"。会将缓存命中得记录写入日志。

eaccelerator.filter="" 判断哪些 PHP 文件必须缓存。您可以指定缓存和不缓存的文件类型(如 "*.php *.phtml"等) 如果参数以 "!" 开头,则匹配这些参数的文件被忽略缓存。默认值为 "",即,所有 PHP 文件都将被缓存。

eaccelerator.shm_max="0" 当使用 " eaccelerator_put() " 函数时禁止其向共享内存中存储过大的文件。该参数指定允许存储的最大值,单位:字节 (10240, 10K, 1M)。"0" 为不限制。默认值为 "0"。 eaccelerator.shm_ttl="0" 当 eAccelerator 获取新脚本的共享内存大小失败时,它将从共享内存中删除所有在最后 "shm_ttl" 秒内没有存取的脚本缓存。默认值为 "0",即:不从共享内春中删除任何缓存文件。

eaccelerator.shm_prune_period="0" 当 eAccelerator 获取新脚本的共享内存大小失败时,他将试图从共享内存中删除早于"shm_prune_period" 秒的缓存脚本。默认值为 "0",即:不从共享内春中删除任何缓存文件。

eaccelerator.shm_only="0" 允许或禁止将已编译脚本缓存在磁盘上。该选项对 session 数据和内容缓存无效。默认值为 "0",即:使用磁盘和共享内存进行缓存。

eaccelerator.compress="1" 允许或禁止压缩内容缓存。默认值为 "1",即:允许压缩。

eaccelerator.compress_level="9" 指定内容缓存的压缩等级。默认值为 "9",为最高等级。

3 创建写入目录并重启服务

4 tmpfs优化:

tmpfs 是一种基于内存的文件系统,通常使用tmpfs 作为数据临时存储,彼此盘存储快得多,此方法适用于各种缓存场景。 添加tmpfs

2 配置 XCache 插件加速

1 基本配置与加载

2 参数详解

[xcache-common] extension = xcache.so

[xcache.admin] ;登录管理界面的用户名和密码,留空则禁用管理界面 xcache.admin.enable_auth = On

管理用户名 xcache.admin.user = "xcache-admin"

MD5加密后的密码,# echo -n pass | md5sum xcache.admin.pass = ""

[xcache] 决定 XCache 如何从系统分配共享内存 xcache.shm_scheme = "mmap"

所用共享缓存的大小。如果为0,缓存将无法使用 xcache.size = 60M

指定将 cache 切分成多少块, 建议设置为 cpu 数 (cat /proc/cpuinfo |grep -c processor) xcache.count = 1

只是作为 hash 槽个数的参考值, 您可以放心地缓存超过这个个数的项目. xcache.slots = 8K

Opcode文件的生存时间。如果将此值设置为0,则将无限期缓存 (int) xcache.ttl = 0

触发垃圾回收的时间间隔。默认设置为0 (秒) xcache.gc_interval = 0

同上, 只是针对变量缓存设置 xcache.var_size = 4M xcache.var_count = 1 xcache.var_slots = 8K xcache.var_ttl = 0 xcache.var_maxttl = 0 xcache.var_gc_interval = 300

启用或禁用测试功能 xcache.test = off

如果启用了 ReadonlyProtection, 将会略微降低性能, 但是会提高一定的安全系数. 这个选项对于xcache.mmap_path = /dev/zero 无效. xcache.readonly_protection = On

用于只读保护的文件路径 这将限制两个 php 进程组共享同一个 /tmp/xcache 目录, 指定为 /dev/zero 时无效 xcache.mmap_path = "/tmp/xcache"

在遇到故障时,放置核心转储的目录。必须是PHP可写入的目录。保留为空代表禁用. xcache.coredump_directory = ""

仅用于 Windows xcache.coredump_type = 0

xcache.disable_on_crash = off
xcache.experimental = off

使用/不使用 opcode 缓存. xcache.size = 0 时无效. xcache.cacher = On

使用 stat() 发现检查脚本更新. xcache.stat = ON

启用或禁用优化。默认状态为禁用 xcache.optimizer = off

[xcache.coverager] 启用代码覆盖信息采集器 启用后 xcache.coveragedump_directory 设置以及 xcache_coverager_start/stop/get/clean() 系列函数才可以使用. (启用后会对降低影响). xcache.coverager = off

每个页面请求自动调用 xcache_coverager_start() xcache.coverager_autostart = off

放置数据采集信息的目录位置。默认使用目录 /tmp/pcovis xcache.coveragedump_directory = ""

3 配置web界面查看xcache缓存信息

1 配置登录用户名和密码 2 复制相关网页到nginx默认发布目录

4 登录并查看

3 配置 zendopencache优化

1 基本配置与加载

2 opcache 重要参数说明

1 Zend Optimizer + 的开关, 关闭时代码不再优化. opcache.enable=1 opcache.enable_cli=1

2 Zend Optimizer + 共享内存的大小, 总共能够存储多少预编译的 PHP 代码(单位:MB)推荐 128 opcache.memory_consumption=64

3 Zend Optimizer + 暂存池中字符串的占内存总量.(单位:MB)推荐 8 opcache.interned_strings_buffer=4

4 最大缓存的文件数目 200 到 100000 之间,推荐 4000 opcache.max_accelerated_files=2000

5 内存“浪费”达到此值对应的百分比,就会发起一个重启调度. opcache.max_wasted_percentage=5

6 开启这条指令, Zend Optimizer + 会自动将当前工作目录的名字追加到脚本键上, 以此消除同名文件间的键值命名冲突.关闭这条指令会提升性能, 但是会对已存在的应用造成破坏. opcache.use_cwd=0

7 开启文件时间戳验证 opcache.validate_timestamps=1

8 2s检查一次文件更新 注意:0是一直检查不是关闭,推荐 60 opcache.revalidate_freq=2

9 允许或禁止在 include_path 中进行文件搜索的优化,opcache.revalidate_path=0

10 是否保存文件/函数的注释 如果apigen、Doctrine、 ZF2、 PHPUnit需要文件注释,推荐 0 opcache.save_comments=1

11 是否加载文件/函数的注释,opcache.load_comments=1 打开快速关闭, 打开这个在PHP Request Shutdown的时候会收内存的速度会提高 推荐 1 opcache.fast_shutdown=1

12 允许覆盖文件存在(file_exists等)的优化特性。opcache.enable_file_override=0

13 定义启动多少个优化过程 opcache.optimization_level=0xffffffff

14 启用此Hack可以暂时性的解决”can’t redeclare class”错误. opcache.inherited_hack=1

15 启用此Hack可以暂时性的解决”can’t redeclare class”错误. opcache.dups_fix=0

16 设置不缓存的黑名单 不缓存指定目录下cache_开头的PHP文件. /png/www/example.com/public_html/cache/cache_ opcache.blacklist_filename=

17 通过文件大小屏除大文件的缓存.默认情况下所有的文件都会被缓存. opcache.max_file_size=0

18 每 N 次请求检查一次缓存校验.默认值0表示检查被禁用了. 由于计算校验值有损性能,这个指令应当紧紧在开发调试的时候开启. opcache.consistency_checks=0

19 从缓存不被访问后,等待多久后(单位为秒)调度重启 opcache.force_restart_timeout=180

20 错误日志文件名.留空表示使用标准错误输出(stderr). opcache.error_log=

21 将错误信息写入到服务器(Apache等)日志 opcache.log_verbosity_level=1

22 内存共享的首选后台.留空则是让系统选择. opcache.preferred_memory_model=

23 防止共享内存在脚本执行期间被意外写入, 仅用于内部调试. opcache.protect_memory=0

五 总结:

生产环境PHP扩展插件安装建议

PHP EXT module 说明 备注
eaccelerator 适合PHP5.3及以前的版本,PHP缓存加速 PHP可选扩展插件
ImageMagick.tar.gz 常用图像处理程序,属功能应用 非PHP的扩展插件
imagick-2.3.0.tgz 需要先安装图形处理程序,属功能应用 可选PHP插件
memcache-2.7.7.tgz memcached客户端数据库缓存优化 可选PHP插件
PDO_MYSQL-1.0.2.tgz PHP数据库访问插件,属于功能应用 可选PHP扩展
xcache-3.0.0.tar.bz2 支持PHP5.1-5.6,PHP缓存加速 可选PHP插件
zendopcache-7.0.5.tgz 支持PHP5.3-5.4,PHP缓存加速 可选PHP插件