安装启用PHP7.4x的Opcache缓存加速扩展
开启是Opcache可以有效的加快网站的访问速度,什么是Opcache?如何启用配置Opcache?这里会详细解释Opcache的前世今生!
什么是Opcache?
在日常的PHP开发过程中,经常会听到Opcache这个词,到底什么是Opcache呢?
Opcache的前世是Optimizer+,它是PHP的官方公司Zend开发的一款闭源但可以免费使用的PHP优化加速组件。 Optimizer+将PHP代码预编译生成的脚本文件Opcode缓存在共享内存中供以后反复使用,从而避免了从磁盘读取代码再次编译的时间消耗。同时,它还应用了一些代码优化模式,使得代码执行更快。从而加速PHP的执行。
Optimizer+在2013年3月正式改名为Opcache。并且在PHP License下开源。
Opcode的执行生命周期
不管您使用哪个OpCache,他们的工作方式几乎是一样的。它们将自己注入到执行生命周期中,并在可能时使许多重复工作短路。Zend OpCache在创建缓存时还将执行许多优化。
PHP是一种脚本语言,大多数人认为这意味着它没有被编译。虽然这是真正的,我们不是传统意义上的调用gcc或javac;相反,我们每次请求脚本时都在编译。事实上,PHP和Java编译生命周期非常相似,因为它们都编译为中间指令集(操作码,或字节码),然后运行在一个虚拟机(VM Zend或JVM)。
安装启用PHP7.4x的Opcache缓存加速扩展
Opcache的安装
在php5.5以后,Opcache 是默认安装好了的,已经不需要我们再手动去安装了,但是默认是没有开启的,如果我们需要使用,需要手动去开启:
打开你的php.ini文件,[opcache]

1
vi /usr/local/php/etc/php.ini

在[opcache]的下面开启,将opccache相关注释去掉

1
2
3
4
5
6
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.enable_cli=1

上面是官方推荐的配置,可以获得更高的性能。当然也可以根据网站实际情况配置,推荐阅读:最佳Zend OpCache的设置调整与参数配置
访问phpinfo探针页面,会看到ZendOPcache的扩展界面。现在已经启用成功了,下一步是具体配置OPcache。
安装启用PHP7.4x的Opcache缓存加速扩展
Opcache的配置说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
opcache.enable=1 (default "1")
;OPcache打开/关闭开关。当设置为Off或者0时,会关闭Opcache, 代码没有被优化和缓存。
opcache.enable_cli=1 (default "0")
;CLI环境下,PHP启用OPcache。这主要是为了测试和调试。从 PHP 7.1.2 开始,默认启用。
opcache.memory_consumption=128 (default "64")
;OPcache共享内存存储大小。用于存储预编译的opcode(以MB为单位)。
opcache.interned_strings_buffer=8 (default "4")
;这是一个很有用的选项,但是似乎完全没有文档说明。PHP使用了一种叫做字符串驻留(string interning)的技术来改善性能。例如,如果你在代码中使用了1000次字符串“foobar”,在PHP内部只会在第一使用这个字符串的时候分配一个不可变的内存区域来存储这个字符串,其他的999次使用都会直接指向这个内存区域。这个选项则会把这个特性提升一个层次——默认情况下这个不可变的内存区域只会存在于单个php-fpm的进程中,如果设置了这个选项,那么它将会在所有的php-fpm进程中共享。在比较大的应用中,这可以非常有效地节约内存,提高应用的性能。
这个选项的值是以兆字节(megabytes)作为单位,如果把它设置为16,则表示16MB,默认是4MB,这是一个比较低的值。
opcache.max_accelerated_files (default "2000")
;这个选项用于控制内存中最多可以缓存多少个PHP文件。这个选项必须得设置得足够大,大于你的项目中的所有PHP文件的总和。
设置值取值范围最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之后是 1000000。也就是说在200到1000000之间。
你可以运行“find . -type f -print | grep php | wc -l”这个命令来快速计算你的代码库中的PHP文件数。
opcache.max_wasted_percentage (default "5")
;计划重新启动之前,“浪费”内存的最大百分比。
opcache.use_cwd (default "1")
;如果启用,OPcache将在哈希表的脚本键之后附加改脚本的工作目录, 以避免同名脚本冲突的问题。禁用此选项可以提高性能,但是可能会导致应用崩溃
opcache.validate_timestamps (default "1")
;如果启用(设置为1),OPcache会在opcache.revalidate_freq设置的秒数去检测文件的时间戳(timestamp)检查脚本是否更新。
如果这个选项被禁用(设置为0),opcache.revalidate_freq会被忽略,PHP文件永远不会被检查。这意味着如果你修改了你的代码,然后你把它更新到服务器上,再在浏览器上请求更新的代码对应的功能,你会看不到更新的效果,你必须使用 <code>opcache_reset()</code> 或者 <code>opcache_invalidate()</code> 函数来手动重置 OPcache。或者重重你的web服务器或者php-fpm 来使文件系统更改生效。
我强烈建议你在生产环境中设置为0,why?因为当你在更新服务器代码的时候,如果代码较多,更新操作是有些延迟的,在这个延迟的过程中必然出现老代码和新代码混合的情况,这个时候对用户请求的处理必然存在不确定性。最后,等所有的代码更新完毕后,再平滑重启PHP和web服务器。
opcache.revalidate_freq (default "2")
;这个选项用于设置缓存的过期时间(单位是秒),当这个时间达到后,opcache会检查你的代码是否改变,如果改变了PHP会重新编译它,生成新的opcode,并且更新缓存。值为“0”表示每次请求都会检查你的PHP代码是否更新(这意味着会增加很多次stat系统调用,译注:stat系统调用是读取文件的状态,这里主要是获取最近修改时间,这个系统调用会发生磁盘I/O,所以必然会消耗一些CPU时间,当然系统调用本身也会消耗一些CPU时间)。可以在开发环境中把它设置为0,生产环境下不用管。
如果 <code>opcache.validate_timestamps</code> 配置指令设置为禁用(设置为0),那么此设置项将会被忽略。
opcache.revalidate_path (default "0")
;在include_path优化中启用或禁用文件搜索
如果被禁用,并且找到了使用的缓存文件相同的include_path,该文件不被再次搜索。因此,如果一个文件与include_path中的其他地方相同的名称出现将不会被发现。如果此优化对此有效,请启用此指令你的应用程序,这个指令的默认值是禁用的,这意味着该优化是活跃的。
opcache.fast_shutdown(默认“0”)
;如果启用,则会使用快速停止续发事件。 所谓快速停止续发事件是指依赖 Zend 引擎的内存管理模块 一次释放全部请求变量的内存,而不是依次释放每一个已分配的内存块。
该指令已在PHP 7.2.0中被删除。快速关机序列的一个变种已经被集成到PHP中,并且如果可能的话将被自动使用。

验证opcache是否生效
开启Opcache后,然后也配置好了相关的配置,那么如何验证是否已经成功了呢?
先把php.ini内的opcache.revalidate_freq=检查时间设置为10秒,也就是说10秒内,不会去检查文件是否有更新,直接用缓存中的opcode:

1
opcache.revalidate_freq=30

在网站根目录下新建立一个test.

1
2
<!--?php &lt;br ?--> $a = 'uzbox';
echo $a;

在网站域名下打开test.php页面,页面显示是uzbox
现在将test.php修改一下

1
2
<!--?php &lt;br ?--> $a = 'uzbox.com';
echo $a;

修改后再返回到test.php的页面,F5刷新页面,你会发现还是uzbox,而没有变成uzbox.com。连续刷新,还是uzbox。直到30秒过后再次刷新,才会正确显示修改过后的uzbox.com
如果30秒内刷新都是uzbox的话,那么你的Opcache就已经开启成功了。
注意:如果把opcache.validate_timestamps设置为0,那么永远都不会去检查文件是否更新。
到这里Opcache的启用与设置就告一段落了,有什么问题欢迎大家在评论区踊跃留言!一起交流经验心得!

订阅
提醒
guest
0 评论
内联反馈
查看所有评论