centos 安裝php緩存 apc或zend-opcode

去官方下載apc:pecl.php.net 搜索apc,安裝最新的.php

#wget http://pecl.php.net/get/APC
# tar -xzvf APC-3.1.9.tgz
#cd  APC-3.1.9.tgz
# /usr/local/php/bin/phpize
# ./configure --enable-apc --enable-mmap --enable-apc-spinlocks --disable-apc-pthreadmutex --with-php-config=/usr/local/php/bin/php-config --prefix=/usr/local/apc
#make
#make installcss

vim php.inihtml

[apc]
extension= "apc.so"
apc.enabled = 1
apc.cache_by_default = on
apc.shm_segments = 1
apc.shm_size = 64
apc.ttl = 7200
apc.user_ttl = 7200
apc.num_files_hint = 0
apc.write_lock = Onjava


安裝opcode 轉自:http://blog.haohtml.com/archives/14646web

支持php5.2以上版本 5.5自帶opcodeshell

參考:http://www.php.net/manual/zh/opcache.installation.phpvim

1
2
3
4
5
6
7
wget http: //pecl .php.net /get/zendopcache-7 .0.2.tgz
tar zxvf zendopcache-7.0.2.tgz
cd zendopcache-7.0.2
/usr/local/php/bin/phpize
. /configure --with-php-config= /usr/local/php/bin/php-config
make && make install
ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

能夠看到 opcache.so 庫文件瀏覽器

在PHP.ini添加以下代碼緩存

1
2
3
4
5
6
7
8
9
[Zend Opcache]
zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts- 20090626 /opcache.so
opcache.memory_consumption= 64
opcache.interned_strings_buffer= 8
opcache.max_accelerated_files= 4000
opcache.force_restart_timeout= 180
opcache.revalidate_freq= 60
opcache.fast_shutdown= 1
opcache.enable_cli= 1

對於上面opcache的各項選項介紹,請參考:http://www.php.net/manual/zh/opcache.configuration.php服務器

重啓php,經過 phpinfo(); 命令查看

php.ini_opcache_extension

在phpinfo()信息中, 目前來看有兩條信息猶爲重要:

Cache hits     (高級緩存命中)
Cache misses  (高級緩存未命中)

在這兩條信息中便可觀察緩存運行狀況, 一目瞭然
高速緩存帶來哪些優化呢? 對代碼運行有多大幫助?

咱們作個測試, 驗證一下什麼是opcache.

echo 'opcache';

這是一段很是簡單的php代碼, 請保存爲demo.php文件而後訪問, 隨意刷新, Cache hits數值會不停地增長, 說明起做用了,
而後你修改代碼爲:

1
echo 'cache new' ;

再刷新demo.php, 應該能夠看到效果, 打印出來的值仍然是opcache, 即源碼被緩存了, 它再也不解析demo.php文件, 試着不停地刷新, 檢測多少秒後才更新.
可設置: opcache.force_restart_timeout=180 的時間來控制更新速度.

這就相似於web項目中的靜態文件緩存一下, 好比咱們加載一個網頁, 瀏覽器會自動幫咱們把jpg, css緩存起來, 惟獨php沒有緩存, 每次均須要open文件, 解析代碼,  執行代碼這一過程, 而opcache便可解決這個問題, 代碼會被高速緩存起來, 提高訪問速度.

xampps環境包已經集成此功能, 不過沒有開啓, 歡迎你們試用.

我的建議: 開發環境非必要狀況下不要開啓opcache, 服務器上則建議開啓,必竟不是每天更新. 緩存起來有它的歷史意義.

注意:Zend Opcache 與  eaccelerator 相沖突。要安裝 Zend Opcache,可能須要先卸載 eaccelerator —— 若是你用了這個加速模塊的話。

配置參數詳解

  • opcache.enable(默認值:1)

    Zend Optimizer + 的開關, 關閉時代碼再也不優化.

  • opcache.memory_consumption(默認值:64)

    Zend Optimizer + 共享內存的大小, 總共可以存儲多少預編譯的 PHP 代碼(單位:MB).

  • opcache.interned_strings_buffer(默認值:4)

    Zend Optimizer + 中interned字符串的佔內存總量.(單位:MB)

  • opcache.max_accelerated_files(默認值:2000)

    Zend Optimizer + 哈希表中鍵數量的最大值(一個腳本文件應當是對應一個key的,因此應當就是容許緩存的文件最大數量).這個值其實是素數列表{ 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 }中第一個大於設定值的數字.值設定範圍: 200 – 100000

  • opcache.max_wasted_percentage(默認值:5)

    「浪費」的內存達到此值對應的百分比,就會發起一個重啓調度.

  • opcache.use_cwd(默認值:1)

    開啓這條指令, Zend Optimizer + 會自動將當前工做目錄的名字追加到腳本鍵上, 以此消除同名文件間的鍵值命名衝突.關閉這條指令會提高性能,可是會對已存在的應用形成破壞.

  • opcache.validate_timestamps(默認值:1)

    禁用時, 您必須手動重置Zend Optimizer +或從新啓動Web服務器,以使文件系統的更改生效. 檢查的頻率是由指令 「opcache.revalidate_freq」 控制.

  • opcache.revalidate_freq(默認值:2)

    多久(以秒爲單位)檢查文件時間戳以改變共享內存的分配.」1″ 表示一秒校驗一次, 可是是每一個請求一次. 「0″ 表示老是在校驗.

  • opcache.revalidate_path(默認值:0)

    容許或禁止在 include_path 中進行文件搜索的優化. 若是文件搜索被禁用並且能夠在相同的 include_path 中找到這個緩存的文件, 文件搜索就不會再進行下去了. 所以,若是 include_path 其它地方有一個同名文件的話, 那就找不到了. 若是這個優化對您的應用有影響,那麼應當容許它搜索. 默認狀況下,指令是禁止的,這就意味着,優化是處於激活狀態的.

  • opcache.save_comments(默認值:1)

    若是禁用,全部的文檔註釋都從代碼中剔除以此減小優化過的代碼的大小.禁用 「文檔註釋」 可能會破壞一些現有的應用和框架(例如: Doctrine, ZF2, PHPUnit).

  • opcache.load_comments(默認值:1)

    若是禁用, PHP文檔註釋將不會從 SHM(共享內存) 中讀取. 儘管」文檔註釋」仍是會被存儲(save_comments=1), 可是那些不管如何都用不上的註釋就沒必要被應用讀取了.

  • opcache.fast_shutdown(默認值:0)

    若是開啓, 一個快速關閉隊列用以提速代碼. 快速關閉隊列並不釋放每一個已分配的塊, 而是讓 Zend 引擎內存管理器來幹這個活.

  • opcache.enable_file_override(默認值:0)

    容許覆蓋文件存在(file_exists等)的優化特性。

  • opcache.optimization_level(默認值:0xffffffff)

    一個位掩碼,其中每一個位容許或禁用相應的緩存經過.

  • opcache.inherited_hack(默認值:1)

    啓用此Hack能夠暫時性的解決」can’t redeclare class」錯誤. Zend Optimizer + 存儲着 DECLARE_CLASS 操做碼使用繼承的地方(這些是惟一能夠被PHP執行的操做碼,可是也可能由於優化引發的父類找不到而沒法執行).當文件被讀取時, Optimizer 會試着經過當前環境綁定被繼承的類. 這樣作的問題是. DECLARE_CLASS 的操做碼可能不被當前腳本所須要, 若是腳本須要操做碼至少完成類的定義操做, 那麼它就會沒法執行.這指令的默認是禁用的, 這就表示優化是有效的. 該在 php 5.3 以及以上的版中再也不被須要, 並且這個設置也不會生效.

  • opcache.dups_fix(默認值:0)

    啓用此Hack能夠暫時性的解決」can’t redeclare class」錯誤.

  • opcache.blacklist_filename(默認值:無)

    Zend Optimizer + 黑名單文件的位置.
    Zend Optimizer + 黑名單是一個文本文件包含了那些不能被加速的文件名.文件格式爲每行一個文件名.文件名須爲一個完整的路徑或者牢牢一個文件前綴(如:/var/www/x 屏蔽了 /var/www 文件和目錄中全部以 ‘x’ 開始的文件或者目錄). 須要屏蔽的文件一般符合下面三個緣由中的一個:
    1) 目錄包含了自動生成的代碼, 如 Smarty 或者 ZFW 的緩存.
    2) 執行加速時代碼沒法很好的運行, 從而耽誤了編譯時評估.
    3) 代碼觸發了一個 Zend Optimizer + 的 Bug

  • opcache.max_file_size(默認值:0)

    經過文件大小屏除大文件的緩存.默認狀況下全部的文件都會被緩存.

  • opcache.consistency_checks(默認值:0)

    每 N 次請求檢查一次緩存校驗.默認值0表示檢查被禁用了.因爲計算校驗值有損性能,這個指令應當牢牢在開發調試的時候開啓.

  • opcache.force_restart_timeout(默認值:180)

    從緩存不被訪問後,等待多久後(單位爲秒)調度重啓.Zend Optimizer + 依託此指令來肯定一個進程可能在處理過程當中出現問題的狀況.這段時間(等待時間)事後, 假設 Zend Optimizer + 發生了一些問題, 並開始幹掉那些仍然持有預防重啓鎖的進程.當這些發生時, 若是日誌的級別是3級或以上, 一個 「killed locker」 的錯誤就會被記錄到 Apache 的日誌中.

  • opcache.error_log(默認值:無)

    Zend Optimizer + 的錯誤日誌文件名.留空表示使用標準錯誤輸出(stderr).

  • opcache.log_verbosity_level(默認值:1)

    將錯誤信息都導向 Web 服務器日誌.默認的只有致命錯誤(level 0) 或者錯誤(level 1)纔會被記錄.你也能夠容許警告(level 2),提示消息(level 3) 或者 調試消息(level 4)被記錄下來.

  • opcache.preferred_memory_model(默認值:無)

    內存共享的首選後臺.留空則是讓系統選擇.

  • opcache.protect_memory(默認值:0)

    防止共享內存在腳本執行期間被意外寫入, 僅用於內部調試.

  • opcache.mmap_base(默認值:無)

    共享內存段映射基礎(僅適用於Windows).全部的PHP進程必須映射到相同的共享內存地址空間.該指令用於手動修復 「Unable to reattach to base address」 錯誤.

名字 默認 可修改範圍 含義
opcache.enable "1" PHP_INI_ALL 是否啓用opcache
opcache.enable_cli "0" PHP_INI_SYSTEM 是否在CLI(即命令行時)啓用opcache
opcache.memory_consumption "64" PHP_INI_SYSTEM 爲opcache分配多少共享內存,單位M
opcache.interned_strings_buffer "4" PHP_INI_SYSTEM interned string的內存大小
opcache.max_accelerated_files "2000" PHP_INI_SYSTEM

最大緩存的文件數目。

實際上這個值會使用第一個大於你配置的數字的下列素數

{ 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 },

如你將該值指定爲400,則實際上該值爲463.

opcache.max_wasted_percentage "5" PHP_INI_SYSTEM  
opcache.use_cwd "1" PHP_INI_SYSTEM

若是置爲1,則將當前路徑加入到文件key中,

以免可能產生的同文件名的文件key衝突

opcache.validate_timestamps "1" PHP_INI_ALL

若是置爲1,則OPCACHE會自動檢測文件的時間戳

(檢測週期爲revalidate_freq),

並根據文件的時間戳來更新opcode,若是置爲0,

則只能手動去重啓opcache或

重啓webserver以使更新後的php文件生效

opcache.revalidate_freq "2" PHP_INI_ALL

opcache自動檢測文件是否更新的週期,單位秒。

若是是0,則每次請求時opcache都要進行檢測。

當validate_timestamps爲0時,本指令無效。

opcache.revalidate_path "0" PHP_INI_ALL  
opcache.save_comments "1" PHP_INI_SYSTEM 是否保存文件中的註釋
opcache.load_comments "1" PHP_INI_ALL

是否load comments,與save_comments聯合起來使用,

若是該值爲0,則即便save_comments爲1,

那麼php腳本中的comments也是不使用的

opcache.fast_shutdown "0" PHP_INI_SYSTEM

是否打開快速關閉,

打開時可以使php在request shutdown時回收內存快

opcache.enable_file_override "0" PHP_INI_SYSTEM

若是置爲1,則每次調用file_exist() is_file() is_readable()函數時,

opcache將要檢查該文件是否被cache了,

這樣增長了檢查存在性和可讀性的開銷,

但避免了當validate_timestamps爲disable時返回錯誤文件狀態的風險。

opcache.optimization_level "0xffffffff" PHP_INI_SYSTEM 運行時控制優化的掩碼(幹什麼的?)
opcache.inherited_hack "1" PHP_INI_SYSTEM 5.3之前使用。5.3後廢棄
opcache.dups_fix "0" PHP_INI_ALL 爲解決「cannot redecllare class" 時,可將其置爲1
opcache.blacklist_filename "" PHP_INI_SYSTEM

設置黑名單文件,符合黑名單文件中定義的php文件將不被opcache。黑名單文件的例子以下:

; Matches a specific file. /var/www/broken.php ; A prefix that matches all files starting with x. /var/www/x ; A wildcard match. /var/www/*-broken.php
一行爲一條規則,支持通配符,註釋以分號開頭
opcache.max_file_size "0" PHP_INI_SYSTEM 被cache的文件的最大size,單位bytes。0表示不限
opcache.consistency_checks "0" PHP_INI_ALL

若是置爲N,N非零,則opcache會每N個請求覈實一下cache的檢驗和。

這會損害性能,應該只在debug時使用

opcache.force_restart_timeout "180" PHP_INI_SYSTEM 若是opcache處於非active狀態,當N秒後opcache將自動重啓
opcache.error_log "" PHP_INI_SYSTEM opcache自身的errorlog文件路徑,爲空時則使用stderr
opcache.log_verbosity_level "1" PHP_INI_SYSTEM 日誌記錄level,默認只有fatal error和error
opcache.preferred_memory_model "" PHP_INI_SYSTEM

opcache首選使用的內存模型,爲空時會選擇最適當的模型。

經常使用的有,mmap shm posix 和win32

opcache.protect_memory "0" PHP_INI_SYSTEM

運行php腳本時保護共享內存防止意外的寫入。

只對debug時有用。

opcache.mmap_base NULL PHP_INI_SYSTEM
相關文章
相關標籤/搜索