2012
Mar
15

执行 PHP 程式码流程,首先系统会先读取 PHP 的原始码,再来会将 PHP code 编译成opcode ,最后就是执行 opcode,如果我们可以将 opcode 暂存下来,那么下一次执行同一个 PHP 时,就能省掉编译的时间,这也是 APC Extension 要做的事,APC 可以将 include php 的 php 原始码,编译好的 opcode 储存下来,等下一次再include 时,就可以直接执行,不需要再编译一次。


APC Extension 安装

安装 APC 时,如果发生这个错误讯息 「configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.」,代表你的系统还没有安装 re2c 这个工具,所以我们必须先安装 re2c。

re2c 安装

这里只要下载 rpm 档回来安装就行了,我的系统是 32 Bit ,所以我选择下载 32 Bit 的re2c 。

  • re2c 下载路径:
    • ftp://195.220.108.108/linux/dag/redhat/el4/en/i386/dag/RPMS/re2c-0.12.3-1.el4.rf.i386.rpm
  • sudo rpm -ivh re2c-0.12.3-1.el4.rf.i386.rpm

apc

  • 下载 : http://pecl.php.net/package/APC
  • 解压缩并进入该目录
  • phpize
  • ./configure --enable-apc-sem -enable-apc
  • make
  • sudo cp module/apc.so /php_extension/ (copy 到php extension 目录)
  • 修改 php.ini 加入 extension apc.so
  • restart apache

apc php.ini 设定

  • apc.stat : 0 代表不检查 php 档案是否有修改过,1 代表若是 php 档有修改过,则重新 cache
  • apc.shm_segments : 固定 =1
  • apc.shm_size : 20M (M = MB , G=GB),单位一定要加,否则会有 error
  • apc.mmap_file_mask
  • apc.enable_cli : 设定 php command line 执行时,是否要有 APC 的功能,如果你想用 command line 的方式测式 APC 功能,记得设定这个值 = 1
  • apc.mmap_file_mask : 设定为 /tmp/apc.xxx 就行了,APC会自动建立档案
Example
  1. [apc]
  2. apc.enabled=1
  3. apc.shm_segments=1
  4. apc.shm_size=20M
  5. apc.ttl=3600
  6. apc.user_ttl=3600
  7. apc.num_files_hint=1024
  8. apc.mmap_file_mask=/tmp/apc.XXXXXX
  9. apc.enable_cli=0 ;取消 php command 的 APC 功能
  10. apc.stat=0 ;不检查php异动
  11.  

问题: PHP Warning: Unknown: apc failed to locate apc_set.php - bailing in Unknown on line 0

解法:设定 apc.stat=1

  • APC 其它设定说明:http://php.net/manual/en/apc.configuration.php
  • 要使用 APC 的话, php.ini 要开启 auto_globals_jit。
    • 「 auto_globals_jit = On」

APC 监控工具

  • 在 apc extension 的档案夹里有一个档案 apc.php ,这个档案有监控APC 的各动统计结果。

apc.php 这个档案可以显示目前系统中已 cache 的 php file,并且计算载入次数。

apc

Memcache Extension

Memcache 是一套 cache 的机制,分成 server 端与client 端,透过 UDP Protocol 来传输资料,你可以将资料暂存在 memcached server,等到下一次要使用时,再从 Memcached server 抓回来,Memcache 要能运做,需要两个Package,一个是 memcached server,另一个是 memcache client,程式是使用 UDP Protocol 来沟通,并非使用常见的 TCP ,不过 UDP也是需要指定 Port ,透过 Port 来传送讯息,另一个特别的功能时,memcached server 可以有很多台机器,并一起组成一个 Group,在对付大型系统时非常的有帮助,接下来我们先来安装 Memcache的相关 packages。

安装 libevent

问题: 「configure: error: libevent is required 」

这个 Error 讯息是指系统尚未安装 libevent 。

安装 Memcached Server

启动 memcache server command : 「memcached -d -u nobody -m 512 127.0.0.1 -p 1200」 (-m 是指最多使用 512 MB 记忆体, -u 是指执行的user ,-p 是指 listen port)

安装 Memcache php client extension

如何储存一个值到 memcached server

Example
  1. $me = memcache_connect('localhost', 81);
  2. $me->set( "key" , "value" ,MEMCACHE_COMPRESSED, 100);
  3. //第三个参数是压缩方式,第四个参数是 expired second

如何撷取一个 memcached server cache 的值

Example
  1. $me = memcache_connect('localhost', 81);
  2. $me->get( "key");

使用 telnet 抓 memcached server 的资料

memcache 是使用 UDP 来沟通,所以可以很简单的透过 telnet 来传输指令,只输入 get [keyname] ,这样就能抓到 memcached server 的资料。

Example
  1. [developer] $ telnet localhost 1200
  2. Trying 127.0.0.1...
  3. Connected to localhost.localdomain (127.0.0.1).
  4. Escape character is '^]'.
  5. get key2
  6. VALUE key2 0 4
  7. test
  8. END

回應 (Leave a comment)