PHP Opcache工作原理

  虽然是在疫情期间,但是我们还是要不断投资自己的大脑,这样才能在今后的职场道路中让自己更值钱。

  PHP工作原理

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

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

  php初始化执行,启动zend引擎,加载已注册的扩展模块

  读取脚本文件,zend引擎对脚本进行词法分析、语法分析、生成语法生成树

  zend引擎编译语法树,生成opcode中间代码

  zend引擎执行opcode,返回执行结果

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

  而对于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设置过期时间

  不要在流量高峰期发布代码

  切记!

  Opcache配置

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

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

  //添加Opcache扩展

  //添加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

  总结北京代孕威信15023219993 广州代孕威信15023219993 深圳代孕威信15023219993 昆明代孕威信15023219993 上海代孕威信15023219993 天津代孕威信15023219993 成都代孕威信15023219993 北京代孕威信15023219993 重庆代孕威信15023219993 重庆代孕威信15023219993

  经历过19年的裁员和20年的疫情之后,我们应该明白只有不断投资自己才是最重要的。只有不断提升自己,才能让自己应对不可控的变化!

  最后,祝愿大家在新的一年里都能找到自己诚心如意的好工作。也欢迎大家关注我的微信公众号和专栏:许铮的成长之路,来一起学习技术知识。我的成长也许也是你的~

原文地址:https://www.cnblogs.com/ipengrui2/p/12302987.html

时间: 2024-11-05 16:08:40

PHP Opcache工作原理的相关文章

Android ListView工作原理完全解析(转自 郭霖老师博客)

原文地址:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android所有常用的原生控件当中,用法最复杂的应该就是ListView了,它专门用于处理那种内容元素很多,手机屏幕无法展示出所有内容的情况.ListView可以使用列表的形式来展示内容,超出屏幕部分的内容只需要通过手指滑动就可以移动到屏幕内了. 另外ListView还有一个非常神奇的功能,我相信大家应该都体验过,即使在ListView中加载非常非常多的数据,比如达到

LVS集群之工作原理

  首先我们要了解LVS的工作机制: LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求. LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默认情况下通过用户请求的地址和端口来判断用户的请求,从而转发到后台真正提供服务的主机,而判断这种请求的是通过套接字来实现,所以四层就可以实现. 而且这个转发的过程对用户而言是透明的(简单的讲,就是用户访问DR的IP,而DR转发给RSS,而用户不知道这个过程) LVS的工作模式: 1.D

47 监控系统基础及zabbix介绍、zabbix工作原理及安装配置、zabbix on CentOS7、zabbix配置

02    zabbix工作原理及安装配置 配置环境 node1192.168.1.120CentOS6.7 node2192.168.1.121CentOS6.7 1.安装配置zabbix #安装前准备 [[email protected] ~]#yum -y install mysql-server mysq [[email protected] ~]# mysql mysql> CREATE DATABASE zabbix CHARACTER SET utf8; mysql> GRANT

inode工作原理及软连接与硬链接

 inode工作原理及软连接,硬链接 inode: 在linux文件系统中,不管什么类型的文件,保存在磁盘分区中时,系统都会分配一个编号,叫做索引节点index node,简称inode inode里面存储了文件的很多参数: 文件类型,权限.UID,GID,属主,属组 链接数(指向这个文件名路径名称个数) 该文件的大小和不同的时间戳 指向磁盘上文件的数据指针 .... 在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)

quarze的工作原理

quartz的工作原理 http://lavasoft.blog.51cto.com/62575/181907/ 几种定时任务的比較 http://blog.sina.com.cn/s/blog_6940cab30101a5pv.html

Java虚拟机工作原理详解

原文地址:http://blog.csdn.net/bingduanlbd/article/details/8363734 一.类加载器 首先来看一下java程序的执行过程. 从这个框图很容易大体上了解java程序工作原理.首先,你写好java代码,保存到硬盘当中.然后你在命令行中输入 [java] view plaincopy javac YourClassName.java 此时,你的java代码就被编译成字节码(.class).如果你是在Eclipse IDE或者其他开发工具中,你保存代码

HashMap工作原理、深入理解JVM、正则

HashMap工作原理: http://www.importnew.com/7099.html: http://blog.csdn.net/ghsau/article/details/16843543: http://blog.csdn.net/ghsau/article/details/16890151. 深入理解JVM: http://www.importnew.com/17770.html: http://www.cnblogs.com/dingyingsi/p/3760447.html.

[Java] SSH框架笔记_SSH三大框架的工作原理及流程

Hibernate工作原理及为什么要用? 原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>读取并解析映射信息3.通过config.buildSessionFactory();//创建SessionFactory4.sessionFactory.openSession();//打

Servlet生命周期和工作原理

Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在下列时刻Servlet容器装载Servlet: 1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码: <loadon-startup>1</loadon-startup&g