前言
什么是OPcache呢?
OPcache是 PHP 中的 Zend 扩展,可以大大提升 PHP 的性能。
OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。
总的来说,就是缓存PHP代码加速执行的,能提升PHP7性能。
并不是像FastCGI只缓存页面,它缓存所有的php文件,像是wordpress本体程序,还有插件。
修改php.ini
找到:[opcache]
,设置为:
[opcache]
;引用opcache
zend_extension = opcache.so
;确定是否启用了Zend OPCache
opcache.enable = 1
;确定是否启用了Zend OPCache CLI
opcache.enable_cli = 1
;OPcache共享内存存储大小。
opcache.memory_consumption = 512
;暂存池中字符串的占内存总量
opcache.interned_strings_buffer = 64
;OPcache哈希表中的最大键数, 控制内存中最多可以缓存多少个PHP文件,命中率不到100%,可以试着提高这个值
opcache.max_accelerated_files = 100000
;配置为1时,会根据revalidate_freq设定的值检查更新代码;设置为0时,永不检查;设置为0时,需要reload php 或调用 opcache_reset 函数清除才能看到最新代码效果
;对于开发/测试,设置1
;对于生产环境,设置0
opcache.validate_timestamps = 0
;设置缓存的过期时间,默认2,检测php代码是否更改间隔(秒),若值为0表示每次请求都会检查你的PHP代码是否更新(将会增加开销)
opcache.revalidate_freq = 2
;是否保存文件/函数的注释,建议保持启用,因为有些库依赖它,本来也没有关掉的必要
opcache.save_comments = 1
;打开快速关闭, 打开这个在PHP Request Shutdown的时候回收内存的速度会提高,在7.2.0中被移除,会自动开启
opcache.fast_shutdown = 1
如果为yum安装的OPcache
需要修改的文件是/etc/php.d/10-opcache.ini
[root@izuf678ne1to5g3a3ms6oez /]# php -i |grep opcache
Additional .ini files parsed => /etc/php.d/10-opcache.ini,
然后在该文件中加入上述条目。
查看是否启用OPcache
[root@php ~]# php-fpm -m
[PHP Modules]
....
[Zend Modules]
Zend OPcache
计算php文件数
find . -type f -print | grep php | wc -l
常用函数
opcache_compile_file($php_file);
#预生成opcode缓存
opcache_is_script_cached($php_file);
#查看是否生成opcode缓存
opcache_invalidate($php_file, true);
#清除单个缓存
opcache_reset();
#清空缓存
opcache_get_status();
#获取缓存的状态信息
opcache_get_configuration();
#获取缓存的配置信息
OPcache命中状态
wget https://raw.githubusercontent.com/rlerdorf/opcache-status/master/opcache.php
#将其放入网站目录里访问
rm opcache.php
#使用完记得删除,或是在nginx中限制访问
OPcache清除配置
cd 网站根目录
echo "<?php opcache_reset(); ?>" > opcache-reset.php
#将清空缓存函数输入到opcache-reset.php 文件中
curl http://网站ip/opcache-reset.php
#使用w3m也可以
#清除所有opcache
rm opcache-reset.php
#使用完记得删除,或是在nginx中限制访问
OPcache缓存黑名单
在opcache.php->Configuration-> blacklist_filename 可以获得缓存黑名单的文本文件
在文件中填入黑名单路径即可,一行一个,可以使用通配符。
简单的黑名单文件可能如下所示:
;这是注释
; 将特定文件加入到黑名单
/var/www/broken.php
; 以字符 x 文件打头的文件
/var/www/x
; 通配符匹配
/var/www/*-broken.php
/var/www/*
可能出现问题
PhP warning - Cannot load Zend OPcache - it was already loaded
你重复加载了opcache.so
文件,也许是你在php.ini
中有多条zend_extension = opcache.so
,又或者你曾执行过yum install php-opcache
,总之将多余删掉,最后只剩一个就可以了。
具体报错信息:
[root@php etc]# php -v
Cannot load Zend OPcache - it was already loaded
PHP 7.3.10 (cli) (built: Sep 24 2019 09:20:18) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.10, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.10, Copyright (c) 1999-2018, by Zend Technologies
PHP Warning: Failed loading Zend extension 'opcache.so'
不能找到opcache.so文件,这说明你的/usr/lib64/php/modules/
目录下没有opcache.so
。你可以下一个opcache.so文件移动到这个目录里。
或者直接安装一个opcache
yum install php-opcache
#我曾换过源,所以使用下面这条
yum enablerepo=remi-php73 install php-opcahe
具体报错信息:
[root@php etc]# php -v
PHP Warning: Failed loading Zend extension 'opcache.so' (tried: /usr/lib64/php/modules/opcache.so (/usr/lib64/php/modules/opcache.so: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/opcache.so.so (/usr/lib64/php/modules/opcache.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP 7.3.8 (cli) (built: Jul 30 2019 09:26:16) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.8, Copyright (c) 1998-2018 Zend Technologies
枫和:“咱们网站真的有必要搞这么多缓存吗?又没人访问。”
Comments | NOTHING