已经忘记何时听说PHP中的OPcache,只知道可以加速网站的速度。按照官方解释OPcache功能为通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的优点便是省去了每次加载和解析 PHP 脚本的浪费。
我安装的PHP版本为7.2.4版本,在网上查找有关OPcache的一些之后,我发现在PHP5.5以后的版本, PHP 默认情况下会安装 OPCache,只是没有被启用,我们可以通过在“php.ini”中修改一些配置信息,来开启 OPCache。
首先,我们需要找到我们的php.ini路径在哪里,我默认的环境为军哥的LNMP,所以默认路径为“/usr/local/php/etc”,如果你找不到你的路径,可以在SSH中执行“whereis php”,这样他会显示PHP的路径信息。
如果你对Linux的命令还算熟悉,那么推荐推荐你使用诸如“vi”命令来操作,如果你跟我一样是个小白,还是推荐使用SFTP类的客户端下载配置文件,再使用本地的文本编辑工具如VScode工具来修改php.ini文件。
opcache.enable=1
搜索php.ini关键词opcache,将“;”去掉,就开启了OPcache的功能。
opcache.enable_cli=1
opcache.memory_consumption=128
OPcache共享内存存储大小,单位为MB。PHP7.0 之前默认值为64,PHP7.0 之后默认值为128。建议根据服务器内存情况来设置,比如大象网服务器的内存是 2G,使用发现 OPcache 内存占用超过默认值不多,我将此参数的值设置为192-256左右,这样多少留下些生长空间。
opcache.interned_strings_buffer=8
PHP使用了一种叫做字符串驻留(string interning)的技术来改善性能。例如,如果你在代码中使用了500次字符串“skying”,在PHP中只会在第一次使用这个字符串的时,分配一个不可变的内存区域来存储这个字符串,其他的499次使用都会直接指向这个内存区域,如同linux的软链接。
默认情况下这个不可变的内存区域只会存在于单个php-fpm的进程中,如果设置了这个选项,那么它将会在所有的php-fpm进程中共享。在比较大的应用中,这可以非常有效地节约内存,提高应用的性能。
这个选项的值也是MB为单位。
opcache.max_accelerated_files=5000
控制内存中最多可以缓存多少个PHP文件,对多缓存文件限制,命中率不到 100% 的话,可以试着提高这个值。
这个选项必须得设置得足够大,大于我们的项目中的所有PHP文件的总和。设置值取值范围最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之后是 1000000。也就是说在200到1000000之间。
opcache.validate_timestamps=0
OPcache会在opcache.revalidate_freq设置的秒数去检测文件的时间戳(timestamp)检查脚本是否更新。如果这个选项被禁用(设置为0),opcache.revalidate_freq会被忽略,PHP文件永远不会被检查。这意味着如果你修改了你的代码,然后你把它更新到服务器上,再在浏览器上请求更新的代码对应的功能,你会看不到更新的效果。
opcache.revalidate_freq=60
OPcache 会在一定时间内去检查文件的修改时间,这里设置检查的时间周期,默认为 2,单位为秒,设置缓存的过期时间(单位是秒),0是每次都要检查并不是不是关闭。
opcache.fast_shutdown=1
可以理解为“允许更快速关闭”(这条在PHP 7.4.12中没有找到,PHP 7.2.24的版本有)。它的作用是在单个请求结束时提供更快速的机制来调用代码中的析构器,从而加快PHP的响应速度和PHP进程资源的回收速度,这样应用程序可以更快速地响应下一个请求。把它设置为1就可以使用这个机制了。
opcache.save_comments=0
opcache.file_cache=/tmp
lnmp restart
重启LNMP。