当前位置 : 主页 > 网络编程 > PHP >

什么是OPCache?如何使用OPCache提升PHP的性能?

来源:互联网 收集:自由互联 发布时间:2021-08-08
本篇文章带大家了解一下OPCache,详细介绍一下使用OPCache提升PHP的性能的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 对于 PHP 这样的解释型语言来说,
本篇文章带大家了解一下OPCache,详细介绍一下使用OPCache提升PHP的性能的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

对于 PHP 这样的解释型语言来说,每次的运行都会将所有的代码进行一次加载解析,这样一方面的好处是代码随时都可以进行热更新修改,因为我们不需要编译。但是这也会带来一个问题,那就是无法承载过大的访问量。毕竟每次加载解析再释放,都会增加 CPU 的负担,通常一台 8核16G 的服务器在2、3000并发左右 CPU 就能达到60%以上的使用率。而且如果你使用的是类似于 Laravel 这种大型的框架,效率将更加低下。这个时候,我们通常会通过增加服务器数量来做负载均衡,从而达到减轻服务器压力的效果。不过,这样做的成本又会增加许多。那么,有没有什么优化的方案呢?

鸟哥在他的博客中针对 PHP7 的优化的一篇文章中,第一条建议就是开启 OPcache 。当然,另外一个方案就是使用 Swoole 。关于 Swoole 的内容我们将来再说,今天,我们先学习学习 OPcache 。

什么是 OPcache

OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。

这是 PHP 文档中关于 OPcache 的简介,也就是说,OPcache 节约了每次加载和解析的步骤,将第一次解析编译后的脚本字节码缓存到系统的共享内存中。其实,这就类似于一个不完全的编译。

类似于 Java 之类的语言,都是要打包编译之后才能上线运行的,比如打包成一个 jar包 。C++ 或 C# 可以打包成一个 .dll 或 .exe 。这些打包之后的文件就是编译完成的文件,将它们运行起来后一般会一直保持运行状态,也就是会成为一个常驻进程,它们的代码就进入内存中了。在程序运行的时候,不需要再进行解释或编译,自然速度就要快很多。而 OPcache 也是起到类似的作用。只不过它并不是完全的一套编译流程,我们还是依赖的 PHP-FPM 来运行脚本,只不过在开启 OPcache 后,PHP-FPM 会先从内存中查找是否已经有相关的已经缓存的字节码在内存中了,如果有的话就直接取用,如果没有的话,会再次进行解释编译后缓存下来。另外,OPcache 是针对文件的,也就是说,一个文件如果是新增加进来的,只有运行过它才会缓存,如果没有运行过,它并不在当前的共享内存中。

网友评论