一、安裝APC
下載 http://pecl.php.net/get/APC-3.1.9.tgz
編譯參數如下:
復制代碼 代碼如下:./configure --enable-apc --enable-apc-spinlocks --disable-apc-pthreadmutex
安裝過程就不說了, 標准的php擴展安裝模式.
二、2套配置文件
性能高, 不適合頻繁更新:
復制代碼 代碼如下:apc.enabled=1
apc.stat = 0
apc.stat_ctime = 0
apc.shm_size = 64M
apc.shm_segments = 1
apc.num_files_hint = 1000
apc.ttl = 0
apc.slam_defense = 0
apc.write_lock = 1
apc.file_update_protection = 2
性能稍低:
復制代碼 代碼如下:apc.enabled=1
apc.stat = 1
apc.stat_ctime = 1
apc.shm_size = 64M
apc.shm_segments = 1
apc.num_files_hint = 1000
apc.ttl = 86400
apc.slam_defense = 0
apc.write_lock = 1
apc.file_update_protection = 2
2套配置關鍵在於apc.stat, 開啟後APC將不會檢查文件是否更新, 這樣可以減少大量不必要的系統調用.
但是, 對於新發布的問題 需要重新啟動PHP. 可以根據情況選擇.
另外, 附上參數說明:
apc.enabled boolean
apc.enabled 可以設成 0 來禁用 APC.主要是用在當 APC 被靜態編譯入 PHP 時,因為沒有其它方法來禁用了(編譯為 DSO , 的時候,可以將php.ini中的extension 行注釋掉)。
apc.shm_segments integer
編譯器緩存要分配的共享內存塊的數目。如果 APC 用光了共享內存但是已經將 apc.shm_size 設為了系統所能允許的最大值,可以嘗試增大此值。
apc.shm_size integer
以 MB 為單位的每個共享內存塊的大小。默認時,有些系統(包括大多數 BSD 變種)的共享內存塊大小非常低。
apc.optimization integer
優化級別。設為 0 則禁用優化器,更高的值則使用更主動的優化。期望非常有限的速度提升。尚在試驗中。
apc.num_files_hint integer
Web 服務器上的被包含或被請求的不同源文件的數目的大概估計。如果不確定則設為 0 或去掉此項;此設定主要用在有數千個源文件的站點。
apc.user_entries_hint integer
與apc.num_files_hint類似, 根據唯一用戶數來存儲緩存變量。 如果不能確定則設置為0或或去掉此項。
apc.ttl integer
緩存條目在緩沖區中允許逗留的秒數。0 表示永不超時。建議值為7200~86400 設為 0 意味著緩沖區有可能被舊的緩存條目填滿,從而導致無法緩存新條目。
apc.user_ttl integer
類似於apc.ttl,只是針對每個用戶而言,建議值為7200~86400。 設為 0 意味著緩沖區有可能被舊的緩存條目填滿,從而導致無法緩存新條目。 如果大於0,APC將嘗試刪除過期條目。
apc.gc_ttl integer
緩存條目在垃圾回收表中能夠存在的秒數。此值提供了一個安全措施,即在服務器進程在執行緩存的源文件時,如果該文件被修改則舊版本將不會被回收,直到達到此 TTL 為止。設為零將禁用此特性。
apc.cache_by_default boolean
默認為 on,但可以設為 off 並和加號開頭的 apc.filters 一起用,則文件僅在匹配過濾器時被緩存。
apc.filters string
一個以逗號分隔的 POSIX 擴展正則表達式的列表。如果任一個模式匹配源文件名,則該文件不被緩存。注意用來匹配的文件名是傳遞給 include/require 的文件名,而不是絕對路徑。如果正則表達式的第一個字符是+ t則意味著任何匹配表達式的文件會被緩存,如果第一個字符是 - 則任何匹配項都不會被緩存。 -是默認值,可以省略掉。
apc.mmap_file_mask string
如果使用 --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.slam_defense integer
在非常繁忙的服務器上,無論是啟動服務還是修改文件, 都可能由於多個進程企圖同時緩存一個文件而導致競爭條件。 這個選項用於設置進程在處理未被緩存的文件時跳過緩存步驟的百分率。 比如設為75表示在遇到未被緩存的文件時有75%的概率不進行緩存,從而減少碰撞幾率。 反對使用該指令,鼓勵設為 0來禁用這個特性。建議該用apc.write_lock指令。
Deprecated by apc.write_lock.
apc.file_update_protection integer
當你在一個運行中的服務器上修改文件時,你應當執行原子操作。 也就是先寫進一個臨時文件,然後將該文件重命名(mv)到最終的名字。 文本編輯器以及 cp, tar 等程序卻並不是這樣操作的,從而導致有可能緩沖了殘缺的文件。 默認值 2 表示在訪問文件時如果發現修改時間距離訪問時間小於 2 秒則不做緩沖。 那個不幸的訪問者可能得到殘缺的內容,但是這種壞影響卻不會通過緩存擴大化。 如果你能確保所有的更新操作都是原子操作,那麼可以用 0 關閉此特性。 如果你的系統由於大量的IO操作導致更新緩慢,你就需要增大此值。
apc.enable_cli integer
是否為CLI版本啟用APC功能,僅用於測試和調試目的才打開此選項。 在正常情況下不是理想的創建、 填充和銷毀 CLI 的每個請求上的 APC 緩存,但各種測試方案很有用,能夠輕松地使 CLI 版本的 PHP APC
apc.max_file_size integer
默認1M, 對於大於此值的文件將不進行緩存.
apc.stat integer
是否啟用腳本更新檢查。 改變這個指令值要非常小心。 默認值 On 表示APC在每次請求腳本時都檢查腳本是否被更新, 如果被更新則自動重新編譯和緩存編譯後的內容。但這樣做對性能有不利影響。 如果設為 Off 則表示不進行檢查,從而使性能得到大幅提高。 但是為了使更新的內容生效,你必須重啟Web服務器(譯者注:如果采用cgi/fcgi類似的,需重啟cgi/fcgi進程)。 生產服務器上腳本文件很少更改, 可以通過禁用本選項獲得顯著的性能提升。
這個指令對於include/require的文件同樣有效。但是需要注意的是, 如果你使用的是相對路徑,APC就必須在每一次include/require時都進行檢查以定位文件。 而使用絕對路徑則可以跳過檢查,所以鼓勵你使用絕對路徑進行include/require操作。
apc.write_lock boolean
在繁忙的服務器上,Web服務器第一次被啟動,或者很多文件在同一時間被修改,APC可能會多次編譯同一個文件,寫鎖保證只有一個進程將嘗試編譯並緩存未緩存的腳本。其他進程試圖使用該腳本將不使用opcode緩存,而不是鎖定和等待緩存生成。
apc.report_autofilter boolean
是否記錄所有由於early/late binding原因而自動未被緩存的腳本。
apc.include_once_override boolean
優化include_once()和require_once()函數以避免執行額外的系統調用。
apc.rfc1867 boolean
開啟監控文件上傳進度功能
apc.rfc1867_prefix string
用於上傳文件的緩沖項條目名稱前綴
apc.rfc1867_name string
需要由APC處理的上傳文件的隱藏表單項名稱
apc.rfc1867_freq string
用戶上傳文件緩存項的更新頻率。 取值可以是總文件大小的百分比,或者以 "k", "m", or "g" kilobytes, megabytes, or gigabytes 結尾的絕對尺寸 (大小寫不敏感). 0 表示盡可能快的更新,不過這樣可能會導致上傳速度下降。
apc.rfc1867_ttl bool
TTL for rfc1867 entries.
apc.localcache boolean
使用非鎖定本地進程shadow-cache ,它可以減少了向緩沖區寫入時鎖之間的競爭。
apc.localcache.size integer
The size of the local process shadow-cache, should be set to a sufficiently large value, approximately half of apc.num_files_hint.
apc.coredump_unmap boolean
啟用APC的信號句柄,例如SIGSEGV信號,當信號寫入核心文件。當這些信號被接收,APC將試圖取消映射的共享內存段,從核心文件中排除它。此設置可以提高系統的穩定性,當接受到致命的信號或者采用APC的大型共享內存段配置方式。
apc.stat_ctime integer
驗證ctime(創建時間)可以避免SVN或者rsync帶來的問題,確保自上次統計inode沒有改變。APC通常只檢查mtime(修改時間)。
apc.canonicalize bool
如果設置為on,則在no-state 模式(不檢查文件更新)時會將相對路徑改為絕對路徑。
apc.preload_path string
apc.use_request_time bool
Use the SAPI request start time for TTL.
apc.file_md5 bool
記錄文件的md5值
apc.lazy_functions integer
啟用函數延遲加載
apc.lazy_classes integer
啟用類延遲加載