Opcode 缓存介绍以及使用 Opcache
介绍 Opcode 缓存
- Operation code,解析 PHP 脚本分析代码,生成 Zend 引擎可以直接执行的中间码
- PHP 解析流程:词法分析(Scanning) -> 语法分析(Parsing) -> 编译(compilation) -> Execution
- Scanning:扫描,将 PHP 代码转换成语言片段(Tokens)
- Parsing:解析,将片段转换成简单而又有意义的表达式
- Compilation:编译,将表达式编译成 Opcode
- Execution:依次执行 Opcode(如果 PHP 代码没有变更,那对应的 Opcode 也不会变更。如果将 PHP 代码对应的 Opcode 缓存起来,那 PHP 执行就可以跳过”词法分析“、”语法分析“、”编译“这三步骤,这样就极大提高了 PHP 的性能)
- 常用的 Opcode 缓存
- Apc 缓存(Alternative PHP Cache),可选 PHP 缓存, 提供内存缓存(类似 Redis、Memcached),不支持 PHP5.5 之后的版本
- Xcache 缓存,3.2版本后支持 PHP5.1-5.6
- OPcache 缓存,PHP5.5 之后内置,优化Opcode,拥有更好的性能,推荐使用
使用 OPcache
- 脚本开始,判断对应的 Opcode 是否存在缓存,如果存在,执行 Opcode,脚本结束。
- 如果缓存不存在,则进行词法分析、语法分析、编译code、如果 OPcache 开启了,则会优化和缓存 Opcode,最后执行 Opcode,脚本结束。
OPcache 安装和配置
- 检查是否安装 OPcache
ls -l /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/
- 编译安装 OPcache
# Opcode 默认安装在扩展目录,如果检查目录下不存在,需进入 PHP 源码包进行安装
# 进入 PHP 源码包目录(在编译安装完 PHP 后,不要将源码包删掉,因为后面可能会要安装一些 PHP 扩展)
cd /usr/local/src/php-7.2.18/ext/opcache/# 通过phpize建立php的外挂模块
/usr/local/php/bin/phpize# 配置,指定php-config目录
./configure --with-php-config=/usr/local/php/bin/php-config# 配置安装 && 编译安装
make
make install
- 配置 php.ini
# 编辑 php.ini
vim /usr/local/php/etc/php.ini# 按 shift + G 到文本最后一行,添加内容[opcache]
;执行OPcache目录
zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/opcache.so
; OPcache的共享内存大小,以兆字节为单位。总共能够存储多少预编译的PHP代码(单位:MB)
opcache.memory_consumption=128
;用来存储字符串的内存大小(单位:MB)
opcache.interned_strings_buffer=8
;最大缓存的文件数目200-100000
opcache.max_accelerated_files=4000
; 检查脚本时间戳是否有更新的周期,以秒为单位。设置为0会导致针对每个请求,OPcache 都会检查脚本更新
opcache.revalidate_freq=60
; 打开快速关闭,打开这个在PHP Request Shutdown的时候会收内存的速度会提高.
opcache.fast_shutdown=1
; 如果禁用,脚本文件中的注释内容将不会被包含到操作码缓存文件,这样可以有效减小优化后的文件体积,禁用此配置指令可能会导致一些依赖注释或注解的应用或框架无法正常工作,比如:Doctrine,Zend Framework2等.
; 推荐0
opcache.save_comments=0
;支持cli模式
opcache.enable_cli=1# 保存退出,重启 PHP 和Nginx
systemctl restart nginx
/etc/init.d/php-fpm restart# 或
kill -9 $(pidof php-fpm)
/usr/local/php/sbin/php-fpm
/usr/local/nginx/sbin/nginx -s reload
<?php
// 查看 OPcache 缓存使用状况
var_dump(opcache_get_status());// 释放所有 OPcache 缓存
opcache_reset();
Opcode 缓存介绍以及使用 Opcache相关推荐
- Opcode缓存介绍
一个程序在运行完成后,内存马上释放,基本上所有的数据都会在此时进行销毁(仅有少数数据会缓存),也就是说此时计算机内存基本上不会存在缓存在这个PHP代码中的数据,这和常驻内存的Java语言有明显的区别. ...
- PHP OPCode缓存:APC详细介绍
PHP OPCode缓存:APC详细介绍 前言 PHP语言在性能上相对于其他编译型语言来说性能算不上突出,但是使用了OPCode缓存后性能提升还是很明显的.常见的主要有 Eaccelerator,XC ...
- 深入理解PHP Opcode缓存原理
什么是opcode缓存? 当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode).Opcode cache的目地是避免重复编译,减少 ...
- opcode php 5.4,为PHP5.4开启Zend OPCode缓存
为PHP5.4开启Zend OPCode缓存 编译步骤: 复制代码 代码如下: git clone git://github.com/zend-dev/ZendOptimizerPlus.git cd ...
- opcode php 缓存,深入理解PHP Opcode缓存原理
什么是opcode缓存? 当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode).Opcode cache的目地是避免重复编译,减少 ...
- opcache 缓存_缓存帽子戏法:Zend Opcache,Etags和查询缓存
opcache 缓存 In this article, we will be looking at some of the common caching techniques in PHP: Opca ...
- php 查询缓存原理,深入了解php opcode缓存原理
什么是opcode opcode(operate code)是计算机指令中的一部分,用于指定要执行的操作,指令的格式和规范由处理器的指定规范指定 opcode是一种php脚本编译后的中间语言,就像ja ...
- PHP-深入理解Opcode缓存
1.什么是opcode缓存? 当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode).Opcode cache的目地是避免重复编译, ...
- 前端开发中的性能那点事(三)php的opcode缓存
2019独角兽企业重金招聘Python工程师标准>>> 前言:由php的运行机制决定,其实php在运行阶段我们也是可以进行缓存的从而提高程序运行效率,这就是我们常说的opcode缓存 ...
最新文章
- CF1407D Discrete Centrifugal Jumps(单调队列+DP)
- 03-背景音乐及广播
- [elixir观察] GenStage 与 Flow
- CEO 赠书 | 讲述创新背后不为人知的故事,改变世界的 Ta 们做对了什么?
- 智能设备破解的那些事儿
- 7-26 单词长度 (15 分) python实现
- 关于逻辑回归,面试官都怎么问
- Android为TV端助力 浅谈Aidl 通讯机制
- 列表与元组——Python基础语法
- Initial Audio Trap Empire Heatup3 Expansion (HeatUp3通用音色库)
- HBase 源码解析
- 报错Caused by: org.hibernate.AnnotationException: No identifier specified for entity: com.liuyanzhao.b
- 用Bolt引擎实现换肤指南
- NCRE | 四级网络工程师错题
- 4G DTU设备数据上传阿里云微信小程序获取阿里云设备数据
- 阿里云张新涛:支持沉浸式体验应用快速落地,阿里云云XR平台发布
- 爬虫有道词典,高精度加密版
- 硬件学习 软件Cadence day07 PCB 底板电路图布线
- 【CET4四级英语】【单词】单词的同义替换(1)
- A记录和CNAME记录——【网络】
热门文章
- 通过主成分分析实现三维模型对齐【Principal Component Analysis】
- python——人工智能(AI)之网络图片文字识别案例详细讲解
- 小米路由器http文件服务器,小米路由器远程任意文件读取漏洞(CVE-2019-18371)
- 【转载】通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?
- android底部滑动出现虚拟按键,Android适配底部虚拟按键的方法详解
- 基于微信小程序云开(统计学生信息并导出excel)2.0版
- PostgreSQL空间回收利器——pg_repack
- vant4的showtoast非正常显示问题
- when I want to have a rest
- zabbix + nexmo = 电话告警