说明

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. c# 网站生成静态页面

    在一些需要经常更新页面数据的网站中,一般访问量不是很大的都直接发布的是带后台代码,每次访问都是有数据库交互的.但是一旦访问量增加了,那么这些服务器开销变成本就要考虑进来了,像一些文章,后台编辑后,文章 ...

  2. python 报错 SyntaxError: Non-ASCII character

    报错: SyntaxError: Non-ASCII character 概意思是,默认文件是ASCII格式,需要更改文件编码,操作是在文件首行加上 #!/usr/bin/python # -*- c ...

  3. 中国计算机学会CCF推荐国际学术期刊会议(最新版)

    中国计算机学会推荐国际学术期刊会议 2014年12月,中国计算机学会(CCF)启动新一轮<)计算机体系结构/高性能计算/存储系统: )计算机网络:)网络与信息安全:)软件工程/系统软件/程序设计 ...

  4. java从Object类型转换成double类型

    java从Object类型转换为double类型: Map<String,Object> map = new HashMap<String,Object>(); map.put ...

  5. cocos2dx 3.3多相机下_transformUpdated bug

    uint32_t Node::processParentFlags(const Mat4& parentTransform, uint32_t parentFlags) { if(_using ...

  6. Centos编译Hadoop 2.x 源码

    1. 前言 Hadoop-2.4.0的源码目录下有个BUILDING.txt文件,它介绍了如何在Linux和Windows下编译源代码,本文基本是遵照BUILDING.txt指示来操作的,这里再做一下 ...

  7. 【Android】3.9 覆盖物功能

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 百度地图SDK所提供的地图等级为3-19级(3.7.1版本中有些部分已经提供到了21级),所包含的信 ...

  8. Java 9和Java 10的新特性

    http://www.infoq.com/cn/news/2014/09/java9 Java 9新特性汇总 继2014年3月份Java 8发布之后,Open JDK加快了开发速度, Java 9的发 ...

  9. SpringKafka消费端配置类ConsumerConfig.java源码

    * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. ...

  10. tortoisegit 7步 学会git分支

    tortoisegit 7步 学会git分支 做自己的产品,分支还是很重要的.例如,我发布了一个app,但是有bug,又想做新功能,怎么办呢?如果只在一个git上开发的话,bug会越来越多,原来bug ...