PHP Opcache工做原理

虽然是在疫情期间,可是咱们仍是要不断投资本身的大脑,这样才能在从此的职场道路中让本身更值钱。

PHP工做原理

首先,咱们先了解下解释型语言PHP的工做原理,这有利于咱们了解PHP Opcache。php

对于PHP,咱们经常使用的是cli模式和php-fpm模式。下面咱们拿cli模式来描述下php执行脚本的运行过程:nginx

  1. php初始化执行,启动zend引擎,加载已注册的扩展模块
  2. 读取脚本文件,zend引擎对脚本进行词法分析、语法分析、生成语法生成树
  3. zend引擎编译语法树,生成opcode中间代码
  4. zend引擎执行opcode,返回执行结果

对于cli模式来讲,每次执行php脚本,都会将以上流程完整执行一遍。segmentfault

而对于php-fpm模式来讲,php初始化环节(步骤1)会在php-fpm启动时执行,而以后的步骤则是会在每次请求执行时重复执行(php-fpm+nginx的工做原理,不了解的同窗能够翻看一下以前的文章nginx+php执行请求的工做原理)。浏览器

对于大流量高并发项目来讲,每次执行脚本或者请求时都须要从新编译固定不变的脚本文件,生成固定的opcode,确实有些浪费资源了,因此opcache应运而生。缓存

PHP Opcache

Opcache,简单来讲,是php应对每次都须要重复编译的脚本文件而开发的组件,能够节省上文所说的解析脚本文件的开销。服务器

Opcache缓存的内容

目前,Opcache缓存的内容包括:微信

  • Opcode
  • Interned String(能够理解为php请求生命周期中不须要释放的String,包括:变量名、类名、方法名、字符串、注释等)

Opcache工做原理

Opcache工做原理实际上是使用了共享内存机制,将须要缓存的内容放入到共享内存中,供其余进程使用。并发

由于Opcache在建立缓存的过程当中不会阻止其余进程读取,因此在使用Opcache时要注意两点,否则会大量消耗资源:高并发

  • 不要给Opcache设置过时时间
  • 不要在流量高峰期发布代码

切记!php-fpm

Opcache配置

说了这么多,下面咱们来看下Opcache如何配置呢?

Opcache配置是放置在php.ini文件中的(没有安装该扩展的同窗能够自行百度安装该扩展),咱们接下来主要讲解一些重要的配置,以来提高PHP总体性能。

//添加Opcache扩展
zend_extension=opcache.so
//开启Opcache
opcache.enable=1
//cli环境下启用Opcache
opcache.enable_cli=1
//浪费内存的上限,以百分比计,若是达到该上限,Opcache则会清空并从新生成缓存。默认5%
opcache.max_wasted_percentage=5
//配置共享内存存储大小,单位MB
opcache.memory_consumption=128
//用来存储临时字符串的内存大小,单位MB。这个配置就是上面说到的Opcache缓存的interned_string,它会在第一次使用到interned_string时缓存到共享内存中,供其余进程后续使用
opcache.interned_strings_buffer=8
//用于控制共享内存最多能够缓存多少个文件,该值最小范围是200,在php5.5.6版本以后,最大值是1000000
opcache.max_accelerated_files=4000
//设置缓存的过时时间,为0的话则每次都要检查
opcache.revalidate_freq=60
//若是启用,OPcache会在opcache.revalidate_freq设置的秒数去检测文件的时间戳(timestamp)检查脚本是否更新。若是这个选项被禁用(设置为0),opcache.revalidate_freq会被忽略,PHP文件永远不会被检查。这意味着若是你修改了你的代码,而后你把它更新到服务器上,再在浏览器上请求更新的代码对应的功能,你会看不到更新的效果
opcache.validate_timestamps=0 //因此像我上面说的,在大流量高并发场景下,该项不要启用,切记
//启用后,能够将依赖Zend引擎的内存管理模块一次释放所有请求变量的内存,而不是依次释放每个已分配的内存块。
opcache.fast_shutdown=1
//启用文件缓存(设置缓存路径),这样Opcache就能够将Opcode缓存到文件中,实现跨php生命周期缓存
opcache.file_cache=/tmp

总结

经历过19年的裁人和20年的疫情以后,咱们应该明白只有不断投资本身才是最重要的。只有不断提高本身,才能让本身应对不可控的变化!

最后,祝愿你们在新的一年里都能找到本身诚心如意的好工做。也欢迎你们关注个人微信公众号和专栏:许铮的技术成长之路(id:xavier-tech-growth),来一块儿学习技术知识。个人成长也许也是你的~

相关文章
相关标签/搜索