PHP服務緩存加速優化實戰

一 PHP緩存加速介紹與環境介紹

1 PHP緩存加速介紹

1 操作碼

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

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並執行,將結果返回。

3 PHP加速器的種類

1 xcache
2 eaccelerator
3 APC
4 zendopcache
選擇方式:通過自己將平臺打好進行壓力測試,選擇自己最合適的

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

二 實驗環境搭建

軟件包:
鏈接:https://pan.baidu.com/s/1LZvqZcjC5tgbL29dRv1N-Q
密碼:ec45

1 安裝並配置PHP

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

2 安裝並配置nginx

PHP服務緩存加速優化實戰

3 配置nginx支持PHP

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

4 測試

PHP服務緩存加速優化實戰

三 緩存加速器的安裝

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、 ZF2、 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插件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章