为什么你的网站开了OPcache,还是很慢?一文教你设置最佳OPcache参数

很多站长都知道打开 opcache 可以提升网站速度,但是当他们打开之后,网站速度有时候却并没有多大提升,速度时快时慢。

我了解大多数站长都懂一点代码,但大部分并不是专业的开发者。他们对 opcache 的工作方式不太了解,只知道可以加速,因此能做的仅仅是开启,后续配置无从下手。

甚至有一部分站长都不知道 opcache 是什么,因为有时候帮他们排查问题的时候,opcache 居然没有打开。

OPcache 是什么

先简单介绍一下 OPcache。

OPcache 是 PHP 内置的字节码缓存组件,能缓存 PHP 的字节码,可以省略 PHP 的编译耗时。

当没有启用 OPCache 时,PHP 的执行是:词法分析和语法分析 -> 编译成字节码 -> 执行。每一个请求到来,PHP 都会重复执行词法语法分析,编译这个重复的步骤,无论文件是否有变化,都要重新编译一次,非常浪费。

当启用了 OPcache 之后:词法分析和语法分析,编译成字节码这两个步骤就被缓存下来了。当访问一个页面时,PHP 做的只有执行这一步骤,速度会快非常多。

为什么速度时快时慢

开启了 OPcache 的站长可能会有这感受:有时候访问挺快,但有时候访问又慢了,明明打开的是同样的页面,但访问速度却一直不太稳定。

首先 OPcache 它就是一个 cache,并不是一个很神奇的东西,没有什么魔法。只要是 cache,就存在命中和未命中的情况。

当命中缓存的时候,直接使用缓存,速度就快。当缓存未命中之后,又需要重新执行所有的编译步骤,速度自然就慢了。缓存未命中情况可以分为两种:

1、缓存过期了
2、可用的缓存空间不足了

因此,如果你开了 OPcache 后访问网站速度依然很慢,大概率是这种情况:
1.你的 OPcache 缓存空间太小,无法缓存所有的 PHP 文件

2. 缓存过期时间设置太短,刚缓存好,一会儿访问时缓存又过期了特别是当你的网站流量不大的时, 不合理的设置可能会导致每次访问都是未命中的状态。

最佳 OPcache 参数

这里提供一份最佳及最简洁的 OPcache 参数供大家参考。

; 启用操作码缓存
opcache.enable=1
opcache.enable_cli=0

; 分配足够内存
opcache.memory_consumption=256
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=65407

; 重要:生产环境不检查时间戳
opcache.validate_timestamps=0
opcache.save_comments=1

; 启用大内存页 (如果系统支持)
opcache.huge_code_pages=1

 

配置中的 validate_timestamps 为 0 可以让你的 OPcache 缓存不过期,保证每次访问都命中缓存。memory_consumption 设置的是256M,这个大小对于大部分 PHP 项目已经足够了。

如何设置

更改 OPcache 配置需要修改 php.ini 文件。如果你在用宝塔面板,可以在  PHP 的配置文件中,找到 [Zend Opcache] 这一节

可以看到我上面的配置缓存只有3s,这对性能影响非常大,可以按照上面的最佳配置重新更改一下配置。更改完配置之后,记得重启 PHP。需要注意一点,当 opcache.validate_timestamps 设置为0之后,缓存会一直存在,不会自动更新。因此当 PHP 代码有改动的时候,需要重启一下 PHP。

转自:https://mp.weixin.qq.com/s/h3ey24bxksssIyV3vJL3Hg

文章版权归原作者所有或来自互联网,未经允许请勿转载。如有侵权请联系我删除,谢谢!
THE END
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录