说明

PHP 5.5 以后内建了 OpCache , OpCache 的加速原理是把编译后的 bytecode 存储在内存里面, 避免重复编译 PHP 所造成的资源浪费.

引用

如何启用

虽然内建了, 但是默认没有启用, 下面是开启的布置, 以这套环境为例子:

PHP 5.5
Ubuntu 14.04
Nginx
PHP-FPM

修改 php.ini 文件

sudo vim /etc/php5/fpm/php.ini

在文件最后面加入:

; 开关打开
opcache.enable= ; 可用内存, 酌情而定, 单位 megabytes
opcache.memory_consumption= ; 对多缓存文件限制, 命中率不到 % 的话, 可以试着提高这个值
opcache.max_accelerated_files= ; Opcache 会在一定时间内去检查文件的修改时间, 这里设置检查的时间周期, 默认为 , 定位为秒
opcache.revalidate_freq=

重启服务器

sudo service php5-fpm restart
sudo service nginx restart

APC VS OpCache

APC 是将要被遗弃的项目, PHP 5.5 都不支持, 而在 PHP 5.5 和 5.6 版本, OpCache 是默认内建的, 并且支持 5.2 到 5.4 的安装.

如何查看效果

效果图 

下图是 PHPHub 开启了 OpCache 后的效果 ( New Relic 监控后台截屏 ) :

开启后的 PHP 平均响应时间不到 60ms, 之前是 120 ~ 130ms

php opcache 配置

[opcache]
zend_extension = "G:/PHP/php-5.5.6-Win32-VC11-x64/ext/php_opcache.dll" ; Zend Optimizer + 的开关, 关闭时代码不再优化.
opcache.enable= ; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli= ; Zend Optimizer + 共享内存的大小, 总共能够存储多少预编译的 PHP 代码(单位:MB)
; 推荐
opcache.memory_consumption= ; Zend Optimizer + 暂存池中字符串的占内存总量.(单位:MB)
; 推荐
opcache.interned_strings_buffer= ; 最大缓存的文件数目 到 之间
; 推荐
opcache.max_accelerated_files= ; 内存“浪费”达到此值对应的百分比,就会发起一个重启调度.
opcache.max_wasted_percentage= ; 开启这条指令, Zend Optimizer + 会自动将当前工作目录的名字追加到脚本键上,
; 以此消除同名文件间的键值命名冲突.关闭这条指令会提升性能,
; 但是会对已存在的应用造成破坏.
opcache.use_cwd= ; 开启文件时间戳验证
opcache.validate_timestamps= ; 2s检查一次文件更新 注意:0是一直检查不是关闭
; 推荐
opcache.revalidate_freq= ; 允许或禁止在 include_path 中进行文件搜索的优化
;opcache.revalidate_path= ; 是否保存文件/函数的注释 如果apigen、Doctrine、 ZF2、 PHPUnit需要文件注释
; 推荐
opcache.save_comments= ; 是否加载文件/函数的注释
;opcache.load_comments= ; 打开快速关闭, 打开这个在PHP Request Shutdown的时候会收内存的速度会提高
; 推荐
opcache.fast_shutdown= ;允许覆盖文件存在(file_exists等)的优化特性。
;opcache.enable_file_override= ; 定义启动多少个优化过程
;opcache.optimization_level=0xffffffff ; 启用此Hack可以暂时性的解决”can’t redeclare class”错误.
;opcache.inherited_hack= ; 启用此Hack可以暂时性的解决”can’t redeclare class”错误.
;opcache.dups_fix= ; 设置不缓存的黑名单
; 不缓存指定目录下cache_开头的PHP文件. /png/www/example.com/public_html/cache/cache_
;opcache.blacklist_filename= ; 通过文件大小屏除大文件的缓存.默认情况下所有的文件都会被缓存.
;opcache.max_file_size= ; 每 N 次请求检查一次缓存校验.默认值0表示检查被禁用了.
; 由于计算校验值有损性能,这个指令应当紧紧在开发调试的时候开启.
;opcache.consistency_checks= ; 从缓存不被访问后,等待多久后(单位为秒)调度重启
;opcache.force_restart_timeout= ; 错误日志文件名.留空表示使用标准错误输出(stderr).
;opcache.error_log= ; 将错误信息写入到服务器(Apache等)日志
;opcache.log_verbosity_level= ; 内存共享的首选后台.留空则是让系统选择.
;opcache.preferred_memory_model= ; 防止共享内存在脚本执行期间被意外写入, 仅用于内部调试.
;opcache.protect_memory=

参考:

http://www.xuebuyuan.com/2039268.html

https://phphub.org/topics/301

使用 OpCache 提升 PHP 5.5+ 程序性能的更多相关文章

  1. 11个显著提升 ASP.NET 应用程序性能的技巧——第1部分

    [编者按]本文出自站外作者 Brij Bhushan Mishra ,Brij 是微软 MVP-ASP.NET/IIS.C# Corner MVP.CodeProject Insider,前 Code ...

  2. 使用 OpCache 提升 PHP 性能

    使用 OpCache 提升 PHP 性能 wdd2007wdd2007 .6k 1月29日 发布 推荐 推荐 收藏 收藏,.3k 浏览 OpCache 通过对 opcode 的缓存和优化来提升 PHP ...

  3. [.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能

    [.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能 本节导读: 上节说了缓存是以空间来换取时间的技术,介绍了客户端缓存和两种常用服务器缓布,本节主要介绍一种. ...

  4. C# 程序性能提升篇-1、装箱和拆箱,枚举的ToString浅析

    前景提要: 编写程序时,也许你不经意间,就不知不觉的使程序代码,发生了装箱和拆箱,从而降低了效率,不要说就发生那么一次两次,如果说是程序中发生了循环.网络程序(不断请求处理的)等这些时候,减少装箱和拆 ...

  5. C# 程序性能提升篇-2、类型(字段类型、class和struct)的错误定义所影响性能浅析

    前景提要: 编写程序时,也许你不经意间,就不知不觉的定义了错误的类型,从而发生了额外的性能消耗,从而降低了效率,不要说就发生那么一次两次,如果说是程序中发生了循环.网络程序(不断请求处理的)等这些时候 ...

  6. 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )

    SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Serve ...

  7. 七个可以提升python程序性能的好习惯,你知道吗?

    掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费.今天就为大家带来七个可以提升python程序性能的好习惯,赶快来学习吧:. 1.使用局部变量 尽量使用局部变量代替全局变量:便 ...

  8. Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net

    Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net 1. 提升单例有能力的1 2. 减少工作数量2 2.1. 减少距 ...

  9. 7个提升Python程序性能的好习惯

    原文作者:爱coding,会编程的核电工程师. 个人博客地址:zhihu.com/people/zhong-yun-75-63 掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费 ...

随机推荐

  1. python学习笔记——multiprocessing 多进程组件-队列Queue

    1 消息队列 1.1 基本语法 消息队列:multiprocessing.Queue,Queue是对进程安全的队列,可以使用Queue实现对进程之间的数据传输:还有一个重要作用是作为缓存使用. Que ...

  2. Windwos配置Maven环境变量

    下载Maven插件:http://maven.apache.org/download.cgi 添加环境变量: MAVEN_HOMEE:\Program Files\Apache Software Fo ...

  3. Mark 装修建材 清单

    装修攻略 介绍 装修公司:东易.龙发.金螳螂.乐豪斯乳胶漆:多乐士,立邦.三棵树.晨阳水漆.华润.都芳瓷砖:马可波罗.东鹏瓷砖.蒙娜丽莎.诺贝尔.简一瓷砖.欧神诺瓷砖.金舵瓷砖.卓远瓷砖.鹰牌.兴辉瓷 ...

  4. 怎么把本地的文件放到esxi主机上

    我们登录到esxi主机后 然后我们点击摘要-->存储器--->右键,浏览数据存储 创建文件夹,然后选择上传到此文件存储

  5. ModelSim+Synplify+Quartus的Alte

    [page_break] 本文适合初学者,源代码:mux4_to_1.v  工作内容: 1.设计一个多路选择器,利用ModelSimSE做功能仿真: 2.利用Synplify Pro进行综合,生成xx ...

  6. posix多线程--三种基本线程编程模型

    本文介绍了三种构建线程解决方案的方式. 一.流水线:每个线程执行同一种操作,并把操作结果传递给下一步骤的线程. 代码示例如下:终端输入一个int值,每个线程将该值加1,并将结果传给下一个线程. #in ...

  7. Xcode模拟器的一些快捷键

    Cmd+1/2/3       可以切换模拟器的显示比例. Option+Shift     可以在模拟器中调出双指拖动效果. Option      可以在模拟器中调出双指放大缩小效果. Comma ...

  8. jQuery+Ajax获取百度百科历史上的今天

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. js 时间格式与时间戳的相互转换和计算几天后的日期是哪一天

    //把日期转换成时间戳 function get_unix_time(time1){    var newstr = time1.replace(/-/g,'/');     var date =  ...

  10. LeetCode 新题: Find Minimum in Rotated Sorted Array II 解题报告-二分法模板解法

    Find Minimum in Rotated Sorted Array II Follow up for "Find Minimum in Rotated Sorted Array&quo ...