先说说php程序的执行流程吧,说明了这个,才好开始我们的优化之旅。

客户端(譬如浏览器)
—》请求Get hello.php
—-》cgi服务器接(譬如apache)收到请求,根据配置寻找php的处理程序(譬如mod_php)
—-》apache加载php的处理程序,php 的处理程序读取php.ini初始化php的解释环境
—-》mod_php定位寻找hell.php,将其载入到内存中来
—-》mod_php编译源代码成为opcode树
—-》mod_php执行opcode
—-》生成结果给浏览器

在这个过程中我们有哪些地方可 以优化呢:
1 将mod_php fast-cgi化,避免每次都要加载这个模块,这个模块还要每次都去初始化php的解释环境
2 缓存php文件的opcode码,这样话,避免每次都去编译。

缓存opcode码有很多软件,apc、以及zend提供的cache等。
转载一个apc的配置和使用:

Alternative PHP Cache(APC)是 PHP 的一个免费公开的优化代码缓存。它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码。

在 Windows 下,APC 要求有 c:/tmp 目录,并且该目录要对 Web 服务器进程可写。

1. 安装:

以PHP extension 形式安装.

2. 配置
apc.enabled boolean
apc.optimization optimization
选 项在脚本中可以改变

APC PHP.ini配置选项详解

[APC]
; Alternative PHP Cache 用于缓存和优化PHP中间代码

apc.cache_by_default = On
;SYS
; 是否默认对所有文件启用缓冲。
; 若设为Off并与以加号开头的apc.filters指令一起用,则文件仅在匹配过滤器时才被缓存。

apc.enable_cli = Off
;SYS
; 是否为CLI版本启用APC功能,仅用于测试和调试目的才打开此指令。

apc.enabled = On
; 是否启用APC,如果APC被静态编译进PHP又想禁用它,这是唯一的办法。

apc.file_update_protection = 2
;SYS
; 当你在一个运行中的服务器上修改文件时,你应当执行原子操作。
; 也就是先写进一个临时文件,然后将该文件重命名(mv)到最终的名字。
; 文本编辑器以及 cp, tar 等程序却并不是这样操作的,从而导致有可能缓冲了残缺的文件。
; 默认值 2 表示在访问文件时如果发现修改时间距离访问时间小于 2 秒则不做缓冲。
; 那个不幸的访问者可能得到残缺的内容,但是这种坏影响却不会通过缓存扩大化。
; 如果你能确保所有的更新操作都是原子操作,那么可以用 0 关闭此特性。
; 如果你的系统由于大量的IO操作导致更新缓慢,你就需要增大此值。

apc.filters =
;SYS
; 一个以逗号分隔的POSIX扩展正则表达式列表。
; 如果源文件名与任意一个模式匹配,则该文件不被缓存。
; 注意,用来匹配的文件名是传递给include/require的文件名,而不是绝对路径。
; 如果正则表达式的第一个字符是”+”则意味着任何匹配表达式的文件会被缓存,
; 如果第一个字符是”-”则任何匹配项都不会被缓存。”-”是默认值,可以省略掉。

apc.ttl = 0
;SYS
; 缓存条目在缓冲区中允许逗留的秒数。0 表示永不超时。建议值为7200~36000。
; 设为 0 意味着缓冲区有可能被旧的缓存条目填满,从而导致无法缓存新条目。

apc.user_ttl = 0
;SYS
; 类似于apc.ttl,只是针对每个用户而言,建议值为7200~36000。
; 设为 0 意味着缓冲区有可能被旧的缓存条目填满,从而导致无法缓存新条目。

apc.gc_ttl = 3600
;SYS
; 缓存条目在垃圾回收表中能够存在的秒数。
; 此值提供了一个安全措施,即使一个服务器进程在执行缓存的源文件时崩溃,
; 而且该源文件已经被修改,为旧版本分配的内存也不会被回收,直到达到此TTL值为止。
; 设为零将禁用此特性。

apc.include_once_override = Off
;SYS
; 关于该指令目前尚无说明文档,参见:http://pecl.php.net/bugs/bug.php?id=8754
; 请保持为Off,否则可能导致意想不到的结果。

apc.max_file_size = 1M
;SYS
; 禁止大于此尺寸的文件被缓存。

apc.mmap_file_mask =
;SYS
; 如果使用–enable-mmap(默认启用)为APC编译了MMAP支持,
; 这里的值就是传递给mmap模块的mktemp风格的文件掩码(建议值为”/tmp/apc.XXXXXX”)。
; 该掩码用于决定内存映射区域是否要被file-backed或者shared memory backed。
; 对于直接的file-backed内存映射,要设置成”/tmp/apc.XXXXXX”的样子(恰好6个X)。
; 要使用POSIX风格的shm_open/mmap就需要设置成”/apc.shm.XXXXXX”的样子。
; 你还可以设为”/dev/zero”来为匿名映射的内存使用内核的”/dev/zero”接口。
; 不定义此指令则表示强制使用匿名映射。

apc.num_files_hint = 1000
;SYS
; Web服务器上可能被包含或被请求的不同源文件的大致数量(建议值为1024~4096)。
; 如果你不能确定,则设为 0 ;此设定主要用于拥有数千个源文件的站点。

apc.optimization = 0
; 优化级别(建议值为 0 ) 。
; 正整数值表示启用优化器,值越高则使用越激进的优化。
; 更高的值可能有非常有限的速度提升,但目前尚在试验中。

apc.report_autofilter = Off
;SYS
; 是否记录所有由于early/late binding原因而自动未被缓存的脚本。

apc.shm_segments = 1
;SYS
; 为编译器缓冲区分配的共享内存块数量(建议值为1)。
; 如果APC耗尽了共享内存,并且已将apc.shm_size指令设为系统允许的最大值,
; 你可以尝试增大此值。

apc.shm_size = 30
;SYS
; 每个共享内存块的大小(以MB为单位,建议值为128~256)。
; 有些系统(包括大多数BSD变种)默认的共享内存块大小非常少。

apc.slam_defense = 0
;SYS(反对使用该指令,建议该用 apc.write_lock指令)
; 在非常繁忙的服务器上,无论是启动服务还是修改文件,
; 都可能由于多个进程企图同时缓存一个文件而导致竞争条件。
; 这个指令用于设置进程在处理未被缓存的文件时跳过缓存步骤的百分率。
; 比如设为75表示在遇到未被缓存的文件时有75%的概率不进行缓存,从而减少碰撞几率。
; 鼓励设为 0 来禁用这个特性。

apc.stat = On
;SYS
; 是否启用脚本更新检查。
; 改变这个指令值要非常小心。
; 默认值 On 表示APC在每次请求脚本时都检查脚本是否被更新,
; 如果被更新则自动重新编译和缓存编译后的内容。但这样做对性能有不利影响。
; 如果设为 Off 则表示不进行检查,从而使性能得到大幅提高。
; 但是为了使更新的内容生效,你必须重启Web服务器。
; 这个指令对于include/require的文件同样有效。但是需要注意的是,
; 如果你使用的是相对路径,APC就必须在每一次include/require时都进行检查以定位文件。
; 而使用绝对路径则可以跳过检查,所以鼓励你使用绝对路径进行include/require操作。

apc.user_entries_hint = 100
;SYS
; 类似于num_files_hint指令,只是针对每个不同用户而言。
; 如果你不能确定,则设为 0 。

apc.write_lock = On
;SYS
; 是否启用写入锁。
; 在非常繁忙的服务器上,无论是启动服务还是修改文件,
; 都可能由于多个进程企图同时缓存一个文件而导致竞争条件。
; 启用该指令可以避免竞争条件的出现。

apc.rfc1867 = Off
;SYS
; 打开该指令后,对于每个恰好在file字段之前含有APC_UPLOAD_PROGRESS字段的上传文件,
; APC都将自动创建一个upload_的用户缓存条目(就是APC_UPLOAD_PROGRESS字段值)。

3. 函数:

apc_cache_info - Retrieves cached information (and meta-data) from APC’s data store
apc_clear_cache - Clears the APC cache
apc_define_constants - Defines a set of constants for later retrieval and mass-definition
apc_delete - Removes a stored variable from the cache
apc_fetch - Fetch a stored variable from the cache
apc_load_constants - Loads a set of constants from the cache
apc_sma_info - Retrieves APC’s Shared Memory Allocation information
apc_store - Cache a variable in the data store

apc的用法比较简单,只有几个函数,列举如下。
apc_cache_info () 返回缓存信息
apc_clear_cache() 清除apc缓存内容。
默认(无参数)时,只清除系统缓存,要清除用户缓存,需用‚user‘参数。
apc_define_constants ( string key, array constants [, bool case_sensitive] ) 将数组constants以常量加入缓存。
apc_load_constants (string Key)。
取出常量缓存。
apc_store ( string key, mixed var [, int ttl] )。
在 缓存中保存数据。
apc_fetch ( string key )。
获 得apc_store保存的缓存内容
apc_delete ( string key )。
删除apc_store保存的内容。

apc 的管理:
到pecl.php.net下载 apc源码包有个apc.php,copy到你的web server可以访问到的地方,浏览即可访问。
管理界面功能有:
1. Refresh Data
2. View Host Stats
3. System Cache Entries
4. User Cache Entries
5. Version Check

配置php.ini的时候一定要跟进编译选项来放置这些扩展的位置。
默认apc.so要放到php.ini同一个目录下,而不是传说中 的extension目录。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

安装apc为php加速

Alternative PHP Cache(APC)是 PHP 的一个免费公开的优化代码缓存。它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码。
主要是加速PHP..
WordPress是一个占用内存的大户,而且执行效率比较低..
我安装了APC后,VPS的整体内存降了30M左右吧..
下面是安装方法:

wget http://pecl.php.net/get/APC-3.1.2.tgz
tar zxvf APC-3.1.2.tgz
cd APC-3.1.2/
/usr/local/php/bin/phpize
./configure --enable-apc --enable-apc-mmap --with-php-config=/usr/local/php/bin/php-config
make
make install

php.ini
查找extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
下面添加extension = "apc.so"

配置php.ini 末尾加入
apc.enabled = 1
apc.cache_by_default = on
apc.shm_segments = 1
apc.shm_size = 32
apc.ttl = 600
apc.user_ttl = 600
apc.num_files_hint = 0
apc.write_lock = On

然后重启服务器就OK

php 的opcode缓存apc以及其安装相关推荐

  1. PHP OPCode缓存:APC详细介绍

    PHP OPCode缓存:APC详细介绍 前言 PHP语言在性能上相对于其他编译型语言来说性能算不上突出,但是使用了OPCode缓存后性能提升还是很明显的.常见的主要有 Eaccelerator,XC ...

  2. Opcode 缓存介绍以及使用 Opcache

    介绍 Opcode 缓存 Operation code,解析 PHP 脚本分析代码,生成 Zend 引擎可以直接执行的中间码 PHP 解析流程:词法分析(Scanning) -> 语法分析(Pa ...

  3. 前端开发中的性能那点事(三)php的opcode缓存

    2019独角兽企业重金招聘Python工程师标准>>> 前言:由php的运行机制决定,其实php在运行阶段我们也是可以进行缓存的从而提高程序运行效率,这就是我们常说的opcode缓存 ...

  4. opcode php 5.4,为PHP5.4开启Zend OPCode缓存

    为PHP5.4开启Zend OPCode缓存 编译步骤: 复制代码 代码如下: git clone git://github.com/zend-dev/ZendOptimizerPlus.git cd ...

  5. php获得opcode,php opcode 缓存

    最近在做php接口优化,其中一个优化是使用opcode缓存. 查阅资料后得知,缓存opcode可通过使用 apc.eAccelerator.XCache 三种扩展. 后来发现在我们的服务器上已经安装了 ...

  6. PHP服务缓存加速——xcache的安装与配置

    1.PHP缓存加速器介绍 (1)操作码的介绍和加速器的原理 当客户请求一个PHP程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码(Operate Code,简称opcode文件) ...

  7. 深入理解PHP Opcode缓存原理

    什么是opcode缓存? 当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode).Opcode cache的目地是避免重复编译,减少 ...

  8. opcode php 缓存,PHP Opcode 缓存

    显示行号 | 选择喜欢的代码风格 默认 GitHub Dune LakeSide Plateau Vibrant Blue Eighties Tranquil PHP 本身来说是非常快的,但是但你当发 ...

  9. php 5.4 opcode,PHP Opcode缓存总结

    1.Zend Optimizer v3.x.x v2.x.x 在PHP-5.2.x以前的PHP版本使用,用优化代码的方法来提高PHP应用程序的执行速度,理论上要比不使用ZO要快40%-100%.实现的 ...

最新文章

  1. 怎么设置表格根据窗口自动调整_Word排版技巧之表格美化,你值得拥有!
  2. 开通博客园,新的网络生活的开始
  3. 快速学习使用springmvc、strust2、strust1以及它们的对比
  4. php object keys_原生js中Object.keys方法详解
  5. C++语言基础 —— 函数
  6. 阿里巴巴:第四财季净亏损76.54亿元,主要由于反垄断法罚款
  7. SVM支持向量机习题解答
  8. jQuery的getter和setter
  9. OpenDocument Format ODF
  10. XidianOJ 1024 简单逆序对
  11. read一个收到RST的socket会返回0?
  12. Vue + JsBarcode 批量打印标签
  13. origin函数拟合
  14. 1276. 不浪费原料的汉堡制作方案(Medium)
  15. 解决windows10 无法开热点问题
  16. 《沧浪之水》、《因为女人》作者阎真的最新作品《活着之上》的阅后笔记
  17. 爬虫学的好,牢饭吃的好 (入门篇)
  18. try 在java中的含义_java中try的含义
  19. 简单的虚拟产品介绍html单页源码
  20. wap相关术语和缩略语

热门文章

  1. 量子计算机科学原理,1000字看懂IBM量子计算机原理
  2. 崇阳计算机技校,湖北省崇阳县龙翔技工学校
  3. postgresql Insert插入的几个报错
  4. 使用Python、OpenCV进行图像接缝雕刻
  5. 数据挖掘-matplotlib、numpy、pandas(二)
  6. 整数中内存中的保存方式:大端、小端
  7. PCL:自定义创建带颜色的点云保存后rgb是一个很大的数,由x y z rgb解包为x y z r g b
  8. Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)
  9. 工业机器视觉系统相机如何选型?(理论篇—3)
  10. webstorm2018修改运行web page端口号,并且让web在本地局域网内用IP访问