PHP服務緩存加速優化實戰

357人閱讀
一 PHP緩存加速介紹與環境介紹
1 PHP緩存加速介紹
1 操做碼
操做碼是PHP編譯後的一箇中間文件,是一個字節碼。
nginx 併發最大萬 ,PHP併發次之幾百 ,mysql最小 幾百,想要網站的併發增大,首先須要優化的是PHP和mysql。
PHP的解析時在服務端的在解析PHP語言時會生成一個特定的操做碼,默認狀況下PHP將程序執行後就會刪除此操做碼,而操做碼緩存的原理是將編譯後的操做碼保存下來,並放入到共享內存中,以便在下次調用該PHP頁面時重用他,避免了相同代碼的重複編譯,節省了PHP引擎重複編譯的時間,下降了服務器負載,同時減小了CPU和內存開銷php

2 PHP操做碼緩存原理圖
PHP服務緩存加速優化實戰
互聯網企業最大的瓶頸是PHP和mysql的瓶頸
流程說明:
1 nginx 接受客戶端的PHP程序訪問請求
2 nginx根據擴展名等過濾規則將PHP程序請求傳遞給解析PHP的fcgi進程(php-fpm)
3 PHP fpm 進程調用PHP解析器讀取站點磁盤上的PHP文件,並加載到內存中
4 PHP解析器將PHP程序編譯成opcode文件,而後將opcode緩存起來
5 PHP fpm引擎執行opcode以後,返回數據給nginx,進而返回給客戶端
6 nginx收到新的PHP請求時,PHP fpm引擎就會直接讀取緩存中的opcode並執行,將結果返回。html

3 PHP加速器的種類
1 xcache
2 eaccelerator
3 APC
4 zendopcache
選擇方式:經過本身將平臺打好進行壓力測試,選擇本身最合適的mysql

建議:
1 首選xcache,緣由是效率好,快,社區活躍支持更高的版本
2 次選eaccelerator,緣由,安裝配置簡單,加速效果更高,文檔資料多,但官方不活躍,僅適合於PHP版本5.4如下的程序
3 再選則zendopcache,緣由是PHP官方顏值,發展潛力好,PHP5.5以前能夠經過zendopcache軟件以插件擴展的方式安裝,從PHP5.5版本開始已經整合到PHP軟件中,編譯時只須要指定相關參數便可
4 APC 瞭解內容nginx

二 實驗環境搭建
軟件包:
連接:https://pan.baidu.com/s/1LZvqZcjC5tgbL29dRv1N-Q
密碼:ec45web

1 安裝並配置PHP
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰sql

2 安裝並配置nginx
PHP服務緩存加速優化實戰數據庫

3 配置nginx支持PHP
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰後端

4 測試
PHP服務緩存加速優化實戰api

三 緩存加速器的安裝
1 eaccelerator 安裝與加載
1 eaccelerator 緩存加速軟件說明
免費的、開源的PHP加速、優化及緩存的擴展插件軟件,能夠緩存PHP程序編譯後的中間代碼opcode、session數據等,下降PHP程序在編譯解析時對服務器的性能開銷,其還能夠加快PHP程序執行的速度,下降服務器負載壓力,是PHP程序代碼執行效率更高。緩存

2 基本原理
eaccelerator 會把編譯好的PHP程序存放在共享內存中。而後每次從內存中調用執行。
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

2 xcache 安裝與加載
1 xcache 緩存加速軟件說明
開源、穩定的PHP opcode緩存優化器。

2 原理
xcache把PHP程序編譯後的數據opcode緩存到共享內存中,表面相同的程序重複執行。用戶請求數據時,能夠直接使用緩存中的數據,提升PHP的訪問速度,一般能夠提升2-5倍。
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

PHP服務緩存加速優化實戰

3 znedopcache 安裝
1 zendopcache 插件說明
是PHP官方爲適應市場須要而開發的一款軟件,在PHP5.5 以前,須要手工進行編譯,但在5.5以後,只須要在編譯PHP的時候加上 --enable-opcache就好了。

PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

4 PHP memcached 擴展插件的安裝
1 memcached 緩存流程圖
PHP服務緩存加速優化實戰

2 memcached 工做步驟以下:
1 程序首先檢查客戶端請求的數據在memcached 服務的緩存中是否存在,若是存在,直接把請求的數據返回,再也不請求後端數據庫
2 若是請求的數據在memcached緩存中不存在,則程序會去memcached後端的數據庫服務器服務
3 把從數據庫中取到的數據返回給客戶端
4 同時把新取到的數據緩存一份到memcached服務器緩存中,下次一樣的請求就直接從memcached服務緩存返回數據,從而減輕數據庫的訪問壓力
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

5 安裝插件PDO_MYSQL擴展模塊
PDO 爲PHP訪問數據庫定義了一個輕量級一致性的接口,他提供了一個數據訪問抽象層,這樣,不管使用什麼樣的數據庫,均可以經過一致性的函數執行查詢並獲取數據。
PHP服務緩存加速優化實戰
若未安裝,則
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

6 安裝圖形化擴展模塊
1 安裝依賴模塊
PHP服務緩存加速優化實戰

2 安裝解壓包
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

3 安裝imagemagick
是一款強大並且穩定的免費的工具集和開發包,能夠用來讀、寫和處理超過89中基本格式的圖片文件。
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

4 安裝imagick
imagick 插件須要imagemagick軟件的支持,因此必須先安裝上述軟件。
imagick插件是一個能夠提供PHP調用imagemagick功能的擴展模塊,使用這個擴展模塊可使PHP具有和imagemagick相同的功能。
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

5 查看
PHP服務緩存加速優化實戰

7 基礎總結
此中模塊中的做用是一致的,每次只能安裝一個
PHP服務緩存加速優化實戰
此中模塊的功能是一致的。用於實現一樣的功能
PHP服務緩存加速優化實戰
此模塊是用於連接數據庫
PHP服務緩存加速優化實戰
配置上述模塊生效的方式,若是有/etc/php.d 則添加
PHP服務緩存加速優化實戰
其默認讀取文件
PHP服務緩存加速優化實戰

若是沒有/etc/php.d 則 經過在php.ini中添加
PHP服務緩存加速優化實戰
此處若是不配置。則下面的模塊指定的是模塊的絕對路徑,若是配置,則指定的是模塊的相對路徑,其中其路徑是在make install 模塊時生成的路徑
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

若是添加,則須要重啓才能完成,此處我已經配置完成,所以能夠直接查看
PHP服務緩存加速優化實戰

四 緩存加速器優化實戰
1 配置eaccelerator 生效
1 基本配置與加載
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

2 參數相關配置
方法一 ,在沒有/etc/php.d 的狀況下配置:
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

方法二: 在有.etc/php.d中的配置
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
參數解釋:
eaccelerator.shm_size="64"
eAccelerator 可使用的共享內存的數量 (以兆爲單位) . "0" 是指操做系統的默認值. 默認值是 "0".可根據服務器的實際狀況來調整,16,32,64,128都是能夠的。
eaccelerator.cache_dir="/tmp/eaccelerator"
這個目錄是給磁盤緩存使用. eAccelerator 在這裏儲存預先編譯好的代碼, 進程數據, 內容以及用戶的自定義內容. 一樣的數據也能被儲存在共享內存中 (這樣能夠提升訪問速度). 默認的設置是 "/tmp/eaccelerator".

eaccelerator.enable="1"
開啓或關閉 eAccelerator。"1" 爲開啓,"0" 爲關閉。默認值爲 "1"。

eaccelerator.optimizer="1"
啓或關閉內部優化器,能夠提高代碼執行速度。"1" 爲開啓,"0" 爲關閉。默認值爲 "1"。

eaccelerator.check_mtime="1"
打開或者關閉 PHP 的文件修改檢查. "1" 是指打開, "0" 是指關閉. 若是您在修改之後從新編譯 PHP 的文件,那麼您應當設置爲 "1". 默認值是 "1".

eaccelerator.debug="0"
開啓或關閉調試日誌記錄。"1" 爲開啓,"0" 爲關閉。默認值爲 "0"。會將緩存命中得記錄寫入日誌。

eaccelerator.filter=""
判斷哪些 PHP 文件必須緩存。您能夠指定緩存和不緩存的文件類型(如 ".php .phtml"等)
若是參數以 "!" 開頭,則匹配這些參數的文件被忽略緩存。默認值爲 "",即,全部 PHP 文件都將被緩存。

eaccelerator.shm_max="0"
當使用 " eaccelerator_put() " 函數時禁止其向共享內存中存儲過大的文件。該參數指定容許存儲的最大值,單位:字節 (10240, 10K, 1M)。"0" 爲不限制。默認值爲 "0"。
eaccelerator.shm_ttl="0"
當 eAccelerator 獲取新腳本的共享內存大小失敗時,它將從共享內存中刪除全部在最後 "shm_ttl" 秒內沒有存取的腳本緩存。默認值爲 "0",即:不從共享內春中刪除任何緩存文件。

eaccelerator.shm_prune_period="0"
當 eAccelerator 獲取新腳本的共享內存大小失敗時,他將試圖從共享內存中刪除早於"shm_prune_period" 秒的緩存腳本。默認值爲 "0",即:不從共享內春中刪除任何緩存文件。

eaccelerator.shm_only="0"
容許或禁止將已編譯腳本緩存在磁盤上。該選項對 session 數據和內容緩存無效。默認值爲 "0",即:使用磁盤和共享內存進行緩存。

eaccelerator.compress="1"
容許或禁止壓縮內容緩存。默認值爲 "1",即:容許壓縮。

eaccelerator.compress_level="9"
指定內容緩存的壓縮等級。默認值爲 "9",爲最高等級。

3 建立寫入目錄並重啓服務
PHP服務緩存加速優化實戰

4 tmpfs優化:
tmpfs 是一種基於內存的文件系統,一般使用tmpfs 做爲數據臨時存儲,彼此盤存儲快得多,此方法適用於各類緩存場景。
添加tmpfs

PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

2 配置 XCache 插件加速
1 基本配置與加載
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

2 參數詳解
[xcache-common]
extension = xcache.so

[xcache.admin]
;登陸管理界面的用戶名和密碼,留空則禁用管理界面
xcache.admin.enable_auth = On

管理用戶名
xcache.admin.user = "xcache-admin"

MD5加密後的密碼,# echo -n pass | md5sum
xcache.admin.pass = ""

[xcache]
決定 XCache 如何從系統分配共享內存
xcache.shm_scheme = "mmap"

所用共享緩存的大小。若是爲0,緩存將沒法使用
xcache.size = 60M

指定將 cache 切分紅多少塊, 建議設置爲 cpu 數 (cat /proc/cpuinfo |grep -c processor)
xcache.count = 1

只是做爲 hash 槽個數的參考值, 您能夠放心地緩存超過這個個數的項目.
xcache.slots = 8K

Opcode文件的生存時間。若是將此值設置爲0,則將無限期緩存 (int)
xcache.ttl = 0

觸發垃圾回收的時間間隔。默認設置爲0 (秒)
xcache.gc_interval = 0

同上, 只是針對變量緩存設置
xcache.var_size = 4M
xcache.var_count = 1
xcache.var_slots = 8K
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300

啓用或禁用測試功能
xcache.test = off

若是啓用了 ReadonlyProtection, 將會略微下降性能, 可是會提升必定的安全係數.
這個選項對於xcache.mmap_path = /dev/zero 無效.
xcache.readonly_protection = On

用於只讀保護的文件路徑
這將限制兩個 php 進程組共享同一個 /tmp/xcache 目錄, 指定爲 /dev/zero 時無效
xcache.mmap_path = "/tmp/xcache"

在遇到故障時,放置核心轉儲的目錄。必須是PHP可寫入的目錄。保留爲空表明禁用.
xcache.coredump_directory = ""

僅用於 Windows
xcache.coredump_type = 0

xcache.disable_on_crash = off
xcache.experimental = off

使用/不使用 opcode 緩存. xcache.size = 0 時無效.
xcache.cacher = On

使用 stat() 發現檢查腳本更新.
xcache.stat = ON

啓用或禁用優化。默認狀態爲禁用
xcache.optimizer = off

[xcache.coverager]
啓用代碼覆蓋信息採集器
啓用後 xcache.coveragedump_directory 設置以及 xcache_coverager_start/stop/get/clean() 系列函數纔可使用. (啓用後會對下降影響).
xcache.coverager = off

每一個頁面請求自動調用 xcache_coverager_start()
xcache.coverager_autostart = off

放置數據採集信息的目錄位置。默認使用目錄 /tmp/pcovis
xcache.coveragedump_directory = ""

PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

3 配置web界面查看xcache緩存信息
1 配置登陸用戶名和密碼
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
2 複製相關網頁到nginx默認發佈目錄
PHP服務緩存加速優化實戰

4 登陸並查看
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

3 配置 zendopencache優化
1 基本配置與加載
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰
PHP服務緩存加速優化實戰

2 opcache 重要參數說明
1 Zend Optimizer + 的開關, 關閉時代碼再也不優化.
opcache.enable=1
opcache.enable_cli=1

2 Zend Optimizer + 共享內存的大小, 總共可以存儲多少預編譯的 PHP 代碼(單位:MB)推薦 128
opcache.memory_consumption=64

3 Zend Optimizer + 暫存池中字符串的佔內存總量.(單位:MB)推薦 8
opcache.interned_strings_buffer=4

4 最大緩存的文件數目 200 到 100000 之間,推薦 4000
opcache.max_accelerated_files=2000

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

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

7 開啓文件時間戳驗證
opcache.validate_timestamps=1

8 2s檢查一次文件更新 注意:0是一直檢查不是關閉,推薦 60
opcache.revalidate_freq=2

9 容許或禁止在 include_path 中進行文件搜索的優化,opcache.revalidate_path=0

10 是否保存文件/函數的註釋 若是apigen、Doctrine、 ZF二、 PHPUnit須要文件註釋,推薦 0
opcache.save_comments=1

11 是否加載文件/函數的註釋,opcache.load_comments=1
打開快速關閉, 打開這個在PHP Request Shutdown的時候會收內存的速度會提升 推薦 1
opcache.fast_shutdown=1

12 容許覆蓋文件存在(file_exists等)的優化特性。opcache.enable_file_override=0

13 定義啓動多少個優化過程
opcache.optimization_level=0xffffffff

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

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

16 設置不緩存的黑名單
不緩存指定目錄下cache_開頭的PHP文件. /png/www/example.com/publichtml/cache/cache\
opcache.blacklist_filename=

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

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

19 從緩存不被訪問後,等待多久後(單位爲秒)調度重啓
opcache.force_restart_timeout=180

20 錯誤日誌文件名.留空表示使用標準錯誤輸出(stderr).
opcache.error_log=

21 將錯誤信息寫入到服務器(Apache等)日誌
opcache.log_verbosity_level=1

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

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

五 總結:
生產環境PHP擴展插件安裝建議

PHP EXT module 說明 備註eaccelerator 適合PHP5.3及之前的版本,PHP緩存加速 PHP可選擴展插件ImageMagick.tar.gz 經常使用圖像處理程序,屬功能應用 非PHP的擴展插件imagick-2.3.0.tgz 須要先安裝圖形處理程序,屬功能應用 可選PHP插件memcache-2.7.7.tgz memcached客戶端數據庫緩存優化 可選PHP插件PDO_MYSQL-1.0.2.tgz PHP數據庫訪問插件,屬於功能應用 可選PHP擴展xcache-3.0.0.tar.bz2 支持PHP5.1-5.6,PHP緩存加速 可選PHP插件zendopcache-7.0.5.tgz 支持PHP5.3-5.4,PHP緩存加速 可選PHP插件

相關文章
相關標籤/搜索