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)