1. 程式人生 > >LNMP 優化之 PHP 快取加速優化

LNMP 優化之 PHP 快取加速優化

1. PHP 快取加速器介紹

1.1 操作碼介紹及快取原理

        當客戶請求一個 PHP 程式時,伺服器的 PHP 引擎會解析該 PHP 程式 ,並將其編譯為特定的操作碼(Operate Code,簡稱 Opcode)檔案,該檔案是執行  PHP 程式碼後的一種二進位制表現形式。預設情況下,這個編譯好的操作碼檔案由 PHP 引擎執行後丟棄。操作碼快取(Opcode Cache)的原理就是將編譯後的操作碼儲存下來,並放到共享記憶體裡,以便在下一次呼叫該 PHP 頁面時重用它,避免了相同程式碼的重複編譯,節省了 PHP 引擎重複編譯的時間,降低了伺服器負載,同時減少了 CPU 和 記憶體開銷。

1.2 PHP 快取加速軟體介紹

        為了提高 PHP 引擎的高併發訪問及執行速度,產生了一系列 PHP 快取加速軟體。這些軟體設計的目的就是快取前文提到的 PHP 引擎解析過的操作碼檔案,以便在指定時間內有相同的 PHP 程式請求訪問時,不再需要重複解析編譯,而是直接呼叫快取中的 PHP 操作碼檔案,這樣就提高了動態 Web 服務的處理速度,從而提升了使用者訪問企業網站的整體體驗。

1.3 LNMP 環境 PHP 快取加速器的原理詳解

在 LNMP 環境中,PHP 引擎啟動獨立的 FCGI 即 php-fpm 程序,由它監聽來自 Nginx 的 PHP 程式請求,並交給 PHP 引擎解析處理,整個執行流程大概如下:

① Nginx 接收客戶端的 PHP 程式訪問請求。

② Nginx 根據副檔名等過濾規則將 PHP 程式請求傳遞給解析 PHP 的 FCGI(php-fpm)程序。

③ php-fpm 程序呼叫 PHP 解析器讀取站點磁碟上的 PHP 檔案,並載入到記憶體中。

④ PHP 解析器將 PHP 程式編譯成為 Opcode 檔案,然後把 Opcode 快取起來。

⑤ php-fpm 引擎執行 Opcode 後,返回資料給 Nginx,進而返回給客戶端。

⑥ Nginx 接收客戶新的 PHP 程式請求,php-fpm 引擎就會直接讀取快取中的 Opcode 並執行,將結果返回。該過程無需第 4 步操作,從而提升了 PHP 編譯解析效率。

1.4 PHP 快取加速器軟體種類及選擇建議

        PHP 快取加速器軟體常見的種類有 XCache、eAccelerator、ZendOpcache、APC(Alternative PHP Cache)等。根據企業的業務需求及選擇前的壓力測試結果或根據個人的經驗偏好選擇。建議首選 XCache,其次是 eAccelerator ,任選其一即可。

1.4.1 首選 XCache 的原因如下

① 經過測試,XCache 效率更高、速度更快;

② XCache 軟體開發社群更活躍;

③ 支援更高版本的 PHP 。

1.4.2 次選 eAccelerator 的原因如下

① 安裝及配置引數更簡單,加速效果也不錯;

② 資料較多,但軟體更新慢,社群不靈活;

③ 僅適合 PHP 版本 5.4 以下的程式。

1.4.3 選擇 ZendOpcache 的原因如下

① 是 PHP 官方研發的新一代快取加速軟體,以後的發展潛力可能會很好。PHP 5.5 以前的版本可以通過 ZendOpcache 軟體以外掛擴充套件的方式安裝,從 PHP 5.5 版本開始已經整合到 PHP 軟體裡了,編譯時只需指定一個引數即可,例如:--enable-opcache;

② ZendOpcache 可能是未來的快取加速首選,現在的穩定性還有待檢查,小規模環境下 PHP 5 以前的版本可以通過外掛方式安裝使用,PHP 5 以上的版本可以直接指定引數編譯使用。

2. PHP 快取加速器安裝環境準備

2.1 確保 LNMP 環境完整

[[email protected] blog]# lsof -i :80

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

nginx   1795  root    8u  IPv4  12472      0t0  TCP *:http (LISTEN)

nginx   1796 nginx    8u  IPv4  12472      0t0  TCP *:http (LISTEN)

[[email protected] blog]# lsof -i :9000

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

php-fpm 1799  root    7u  IPv4  12492      0t0  TCP localhost:cslistener (LISTEN)

php-fpm 1800 nginx    0u  IPv4  12492      0t0  TCP localhost:cslistener (LISTEN)

php-fpm 1801 nginx    0u  IPv4  12492      0t0  TCP localhost:cslistener (LISTEN)

[[email protected] blog]# pwd

/application/nginx/html/blog

[[email protected] blog]# cd /application/nginx/html/blog

[[email protected] blog]# vim phpinfo.php

<?php

phpinfo();

?>

 

2.2 有關 LNMP 環境擴充套件軟體的部署說明

2.2.1 LNMP 快取加速特別提示

無論是 Apache 還是 Nginx ,最後都是通過 PHP 提供動態程式解析的。因此不管是 Apache 的 libphp5.so 模組方式,還是 Nginx 的 FCGI 的 PHP 服務方式,最終在 PHP 引擎上的優化是一致的。

2.2.2 解決部分加速軟體的 Perl 編譯問題

在下面各類軟體的安裝編譯過程中,如果不解決 Perl 的一些環境問題可能會帶來意想不到的安裝錯誤或警告。

① 配置環境變數 LC_ALL

[[email protected] ~]# echo 'export LC_ALL=C'>>/etc/profile     

# 設定環境變數,解決後面 Perl 程式外掛的編譯問題。

[[email protected] ~]# tail -1 /etc/profile    

export LC_ALL=C

[[email protected] ~]# source /etc/profile

[[email protected] ~]# echo $LC_ALL

C   

② 安裝 Perl 相關軟體依賴(以下兩行命令任意一個即可)

yum install perl-CPAN -y

yum install perl-devel -y

3. 安裝 PHP 快取加速器

安裝 PHP eAccelerator 快取加速模組:

        eAccelerator 快取加速外掛說明:

        eAccelerator 是一個免費的、開源的 PHP 加速、優化及快取的擴充套件外掛軟體,它可以快取 PHP 程式編譯後的中間程式碼檔案(opcode)、session 資料等,降低 PHP 程式在編譯解析時對伺服器的效能開銷。eAccelerator 還可以加快 PHP 程式的執行速度,降低伺服器負載壓力,使 PHP 程式程式碼執行效率提高 1~10 倍。

        eAccelerator 會把編譯好的 PHP 程式存放在共享記憶體裡,然後每次從記憶體裡呼叫執行,可以設定把一些不合適放在記憶體裡快取的編譯結果儲存到磁碟上,預設情況下,磁碟和記憶體快取都會被eAccelerator 使用。

        eAccelerator 最新版的下載地址為:https://github.com/eaccelerator/eaccelerator/downloads

        eAccelerator 外掛安裝過程:

        具體的安裝命令如下:

cd /home/oldboy/tools/

wget https://github.com/downloads/eaccelerator/eaccelerator/eaccelerator-0.9.6.tar.bz2

tar xf eaccelerator-0.9.6.tar.bz2

cd eaccelerator-0.9.6

/application/php/bin/phpize

./configure --enable-eaccelerator=shared --with-php-config=/application/php/bin/php-config

make

make install

cd ../

ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

        安裝操作詳細過程如下:

[[email protected] tools]# cd /home/oldboy/tools/

[[email protected] tools]# tar xf eaccelerator-0.9.6.tar.bz2

[[email protected] tools]# cd eaccelerator-0.9.6

[[email protected] eaccelerator-0.9.6]# /application/php/bin/phpize

[[email protected] eaccelerator-0.9.6]# ./configure --enable-eaccelerator=shared --with-php-config=/application/php/bin/php-config

[[email protected] eaccelerator-0.9.6]# make

[[email protected] eaccelerator-0.9.6]# make install

[[email protected] eaccelerator-0.9.6]# ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so

[[email protected] eaccelerator-0.9.6]# cd ../

提示:最後生成的 eaccelerator.so 模組就表示 eaccelerator 安裝成功。

安裝 PHP XCache 快取加速模組:

        XCache 快取加速外掛說明:

        XCache 是一個開源、又快又穩定的 PHP opcode 快取器、優化器。XCache 把 PHP 程式編譯後的資料(opcode)快取到共享記憶體裡,避免相同的程式重複編譯。使用者請求相同的 PHP 程式時,可以直接使用快取中編譯好的資料,從而提高 PHP 的訪問速度,通常可以提升 2~5 倍,並大幅降低伺服器負載開銷。

        XCache 外掛的安裝過程:

        具體的安裝命令集如下:

cd /home/oldboy/tools/

wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.bz2

tar xf xcache-3.2.0.tar.bz2

cd xcache-3.2.0

/application/php/bin/phpize

./configure --enable-xcache --with-php-config=/application/php/bin/php-config

make

make install

ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

cd ../

        安裝操作詳細過程如下:  

[[email protected] oldboy]# cd /home/oldboy/tools/

[[email protected] tools]# wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.bz2

[[email protected] tools]# ls xcache-3.2.0.tar.bz2

xcache-3.2.0.tar.bz2

[[email protected] tools]# tar xf xcache-3.2.0.tar.bz2

[[email protected] tools]# cd xcache-3.2.0

[[email protected] xcache-3.2.0]# /application/php/bin/phpize

[[email protected] xcache-3.2.0]# ./configure --enable-xcache --with-phpconfig=/application/php/bin/php-config

[[email protected] xcache-3.2.0]# make

[[email protected] xcache-3.2.0]# make install

[[email protected] xcache-3.2.0]# ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so  xcache.so

[[email protected] xcache-3.2.0]# cd ../

提示:最後生成的 xcache..so 模組就表示 xcache 安裝成功。

安裝 PHP ZendOpcache 官方加速外掛:

        ZendOpcache 外掛說明:                    

        從 PHP 5.5 開始,官方已經集成了新一代的快取加速軟體,其名字為 ZendOpcache,功能和上面的兩種相似但又有少許不同。據官方說,ZendOpcache 快取速度更快。

        這幾個 PHP 加速外掛的主要原理基本相同,就是把 PHP 執行後的資料快取到記憶體中從而避免重複的編譯過程,使其能夠直接使用快取中已編譯的程式碼,從而提高速度,降低伺服器負載。他們的效率是顯而易見的,一些大型的 CMS ,每次開啟一個頁面要呼叫數十個 PHP 檔案,執行數萬行程式碼,效率可想而知,安裝上述加速器後,開啟頁面的速度明顯加快。

        PHP 5.5 以上版本,支援 ZendOpcache 很簡單,只需在編譯 PHP 5.5 時加上 --enable-opcache就行了。在 PHP 5.5 版本以前,ZendOpcache 也有獨立的軟體,並且也支援低版本的 PHP 5.2.*、PHP 5.3.*、PHP5.4.*。下面以 PHP 5.3 版本為例講解 ZendOpcache 軟體,以 PHP 擴充套件外掛的方式介紹安裝步驟。

        官方下載地址為:http://pecl.php.net/package/ZendOpcache。

        ZendOpcache 外掛安裝過程:

        由於前面 LNMP 環境使用的是 PHP 5.3 版本,所以需要以 PHP 擴充套件外掛的方式安裝,不能使用 PHP 編譯直接加引數( --enable-opcache)的方式安裝(PHP 5.5 以上才可以)。

        具體的安裝命令集如下:

        cd /home/oldboy/tools

        wget -q http://pecl.php.net/get/zendopcache-7.0.5.tgz

        tar xf zendopcache-7.0.5.tgz

        cd zendopcache-7.0.5

        /application/php/bin/phpize

        ./configure --enable-opcache --with-php-config=/application/php/bin/php-config

        make

        make install

        ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

        cd ../

        安裝操作詳細過程如下:

[[email protected] tools]#  cd /home/oldboy/tools

[[email protected] tools]#  wget -q http://pecl.php.net/get/zendopcache-7.0.5.tgz

[[email protected] tools]#  tar xf zendopcache-7.0.5.tgz

[[email protected] tools]#  cd zendopcache-7.0.5

[[email protected] zendopcache-7.0.5]#  /application/php/bin/phpize

[[email protected] zendopcache-7.0.5]#  ./configure --enable-opcache --with-config=php-/application/php/bin/php-config

[[email protected] zendopcache-7.0.5]#  make

[[email protected] zendopcache-7.0.5]#  make install

[[email protected] zendopcache-7.0.5]#  ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so  opcache.so  xcache.so

提示:最後生成的 opcache.so 模組就表示 opcache 安裝成功。

安裝資料庫快取及其他 PHP 擴充套件外掛:         

安裝 PHP Memcached 擴充套件外掛:

        Memcached 快取軟體說明:

        Memcached 是一個開源的、支援高效能、高併發及分散式的記憶體快取服務軟體。Memcached 服務分為伺服器端和客戶端兩部分,期中伺服器端軟體的名字形如 Memcached-1.4.13.tar.gz,客戶端軟體的名字形如 Memcache-2.27.tar.gz。Memcached是高效能的分散式記憶體快取服務。使用Memcached 的主要目的是,通過在自身記憶體中快取資料庫的查詢結果,減少資料庫訪問次數,以提高動態 Web 應用的速度,提高網站架構的併發能力和擴充套件性。

        Memcached 服務通過在事先規劃好的系統記憶體空間中臨時快取資料庫中的各類資料,以達到減少前端業務對資料庫的直接高併發訪問,從而提升大規模網站叢集中動態服務的併發訪問能力。

        生產場景的 Memcached 服務一般被用來儲存網站中經常被讀取的物件或資料,就像我們的客戶端瀏覽器把經常訪問的網頁快取起來一樣,通過記憶體快取來存取物件或資料要比磁碟存取快很多,因為磁碟是機械的介質。因此,在當今的 IT 企業中,Memcached 的應用範圍很廣。

        Memcached 服務的工作步驟如下:

        ① 程式首先檢查客戶端請求的資料在 Memcached 服務的快取中是否存在。如果存在,直接把請求的資料返回,不再請求資料庫;

        ② 如果請求的資料在 Memcached 快取中不存在,則程式會去 Memcached 後端的資料庫服務;

        ③ 把從資料庫中取到的資料返回給客戶端;

        ④ 同時把新取到的資料庫的資料快取一份到 Memcached 服務快取中,下次同樣的請求就直接從 Memcached 服務快取返回資料,從而減輕資料庫的訪問壓力。

        Memcached 快取 PHP 擴充套件外掛安裝:

        Memcached 分為伺服器端軟體和客戶端軟體兩部分,本文是 Memcached 客戶端 PHP 的擴充套件外掛(Memcache-2.2.7.tgz)在 PHP 環境中的安裝,用於訪問 Memcached 伺服器端資料。

        PHP 的Memcache 擴充套件外掛下載地址為:http://pecl.php.net/package/Memcache 。

        具體的安裝命令集如下:( 提前下載安裝包 )

        cd /home/oldboy/tools

        tar zxf memcache-2.2.5.tgz

        cd memcache-2.2.5

        /application/php/bin/phpize

        ./configure --enable-memcache --with-php-config=/application/php/bin/php-config

        make

        make install

        ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

        cd ../

        安裝操作詳細過程如下:

[[email protected] oldboy]# cd /home/oldboy/tools

[[email protected] tools]# ls memcache-2.2.5.tgz

memcache-2.2.5.tgz

[[email protected] tools]# tar zxf memcache-2.2.5.tgz

[[email protected] tools]# cd memcache-2.2.5

[[email protected] memcache-2.2.5]#  /application/php/bin/phpize

[[email protected] memcache-2.2.5]# ./configure --enable-memcache --with-php-config=/application/php/bin/php-config

[[email protected] memcache-2.2.5]# make

[[email protected] memcache-2.2.5]# make install

[[email protected] memcache-2.2.5]# ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so  memcache.so  opcache.so  xcache.so

提示:最後生成的 memcache.so 模組就表示 memcache 安裝成功。

安裝 PDO_MYSQL 擴充套件模組:

        PDO_MYSQL 擴充套件外掛說明:

        PDO 擴充套件為 PHP 訪問資料庫定義了一個輕量級一致性的介面,它提供了一個數據訪問抽象層。這樣無論使用的是什麼資料庫,都可以通過一致性的函式執行查詢並獲取資料。

        PDO_MYSQL 擴充套件外掛的安裝過程:

        PDO_MYSQL 的安裝有兩種方法,一種是外掛方式安裝,另一種是編譯 PHP 時加入PDO_MYSQL 支援,直接指定 PHP 的對應 PDO_MYSQL 編譯引數安裝,例如:--with-pdo-mysql

=mysqlnd 。

        同時,PHP 環境也可以不安裝 MySQL 軟體,直接指定引數 --with-mysql=mysqlnd 即可讓 PHP 支援連線 MySQL 資料庫。

        具體的安裝命令集如下:( 提前下載安裝包 )

cd /home/oldboy/tools

ls PDO_MYSQL-1.0.2.tgz

tar xf PDO_MYSQL-1.0.2.tgz

cd PDO_MYSQL-1.0.2

/application/php/bin/phpize

./configure --with-php-config=/application/php/bin/php-config --with-pdo-mysql=/application/mysql

make

make install

ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

cd ../

        安裝操作詳細過程如下:

[[email protected] tools]# cd /home/oldboy/tools/

[[email protected] tools]# ls PDO_MYSQL-1.0.2.tgz

PDO_MYSQL-1.0.2.tgz

[[email protected] tools]# tar xf PDO_MYSQL-1.0.2.tgz

[[email protected] tools]# cd PDO_MYSQL-1.0.2

[[email protected] PDO_MYSQL-1.0.2]#  /application/php/bin/phpize

[[email protected] PDO_MYSQL-1.0.2]# ./configure --with-php-config=/application/php/bin/php-config --with-pdo-mysql=/application/mysql        

[[email protected] PDO_MYSQL-1.0.2]# make   

[[email protected] PDO_MYSQL-1.0.2]# make install

[[email protected] PDO_MYSQL-1.0.2]# ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so  memcache.so  opcache.so  pdo_mysql.so  xcache.so

提示:生成模組 pdo_mysql.so 表示PDO_MYSQL 擴充套件外掛安裝成功。

安裝影象處理程式及 imagick 擴充套件模組:

        安裝 ImageMagick 影象軟體:

        ImageMagick 是一套功能強大、穩定且免費的工具包和開發包,可以用來讀、寫和處理超過 89 種基本格式的圖片檔案,包括流行的 tiff、jpeg、gif、png、pdf 以及 PhotoCD 等。利用 ImageMagick 可以根據 Web 應用程式的需要動態生成圖片,還可以對一個(或一組)圖片進行改變大小、旋轉、銳化、減色或增加特效等操作,並將操作的結果以相同格式或其他格式儲存。對圖片的操作,既可以通過命令列進行,也可以用C/C++

Perl、Java、PHP、Python 或 Ruby 程式設計來完成。同時 ImageMagick 提供了一個高質量的 2D 工具包,部分支援 SVG。現在,ImageMagick 的主要精力集中在加強效能、減少 bug 以及提供穩定的 API 和 ABI 上。

        ImageMagick 的常見功能如下:

        ① 將圖片從一個格式轉化成另一個格式,包括直接轉化成圖示;

        ② 可以改變圖片尺寸,旋轉、銳化(sharpen)、減色、設定圖片特效;

        ③ 對圖片設定各種尺寸縮圖;

        ④ 將圖片設定為可以適用於 Web 背景的透明圖片;

        ⑤ 將一組圖片做成 gif 動畫,直接 convert ;

        ⑥ 將幾張圖片做成一張組合圖片;

        ⑦ 在一個圖片上寫字或畫圖形,帶文字陰影和邊框渲染;

        ⑧ 給圖片加邊框或框架;

        ⑨ 取得一些圖片的特性資訊。

        ImageMagick 幾乎包括了 gimp 可以實現的所有常規外掛功能,甚至包括各種曲線引數的渲染功能。下載地址為:http://download.chinaunix.net/download/0001000/95.shtml,需要提前下載好。

        具體的安裝命令集如下:( 提前下載安裝包 )

cd /home/oldboy/tools

ls -l ImageMagick.tar.gz

tar xf ImageMagick.tar.gz

cd ImageMagick-6.5.1-2

./configure

make && make install

cd  ../

提示:① 此影象軟體安裝時 make 步驟耗時較長;

          ② 該軟體不是安裝 PHP 的擴充套件,因此沒有生成 .so 的模組檔案。

        安裝操作詳細過程如下:

[[email protected] tools]# cd /home/oldboy/tools/

[[email protected] tools]# ls -l ImageMagick.tar.gz

[[email protected] tools]# tar xf ImageMagick.tar.gz

[[email protected] tools]# cd ImageMagick-6.5.1-2

[[email protected] ImageMagick-6.5.1-2 ]# ./configure

[[email protected] ImageMagick-6.5.1-2 ]# make && make install

[[email protected] ImageMagick-6.5.1-2 ]# cd  ../

提示:關於 ImageMagick 的安裝報錯及解決方法見《 Web 叢集實戰 P258 》。

        安裝 imagick PHP 擴充套件外掛:

        imagick 外掛工作需要 ImageMagick 軟體的支援,所以必須要安裝 ImageMagick ,否則會報錯。

        imagick 外掛是一個可以供 PHP 呼叫 ImageMagick 功能的擴充套件模組。使用這個擴充套件可以使 PHP 具備和 ImageMagick 相同的功能。

        安裝了  ImageMagick 影象程式後,再安裝 PHP  的擴充套件 imagick 外掛,才能使用  ImageMagick 提供的 API 進行圖片的建立與修改、壓縮等操作,因為它們都整合在 imagick 這個 PHP 擴充套件中。

        具體的安裝命令集如下:( 提前下載安裝包 )

        cd /home/oldboy/tools

        ls -l imagick-2.3.0.tgz         

        tar zxf imagick-2.3.0.tgz

        cd imagick-2.3.0

        /application/php/bin/phpize

       ./configure --with-php-config=/application/php/bin/php-config

        make && make install

        ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

        cd ../

        安裝操作詳細過程如下:

[[email protected] tools]# cd /home/oldboy/tools

[[email protected] tools]# ls -l imagick-2.3.0.tgz         

[[email protected] tools]# tar zxf imagick-2.3.0.tgz

[[email protected] tools]# cd imagick-2.3.0

[[email protected] imagick-2.3.0]# /application/php/bin/phpize

[[email protected] imagick-2.3.0]# ./configure --with-php-config=/application/php/bin/php-config

[[email protected] imagick-2.3.0]# make

[[email protected] imagick-2.3.0]# make install

[[email protected] imagick-2.3.0]# ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

eaccelerator.so  imagick.so  memcache.so  opcache.so  pdo_mysql.so  xcache.so

提示:生成  imagick.so 模組表示 imagick 外掛 安裝成功。

        檢查所有 PHP 擴充套件外掛模組安裝的成果:

[[email protected] tools]# ls -l /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/

total 2984

-rwxr-xr-x 1 root root  416797 Mar 19 12:11  eaccelerator.so

-rwxr-xr-x 1 root root 1070977 Mar 20 08:40 imagick.so

-rwxr-xr-x 1 root root  246672 Mar 19 14:12  memcache.so

-rwxr-xr-x 1 root root  491814 Mar 19 13:12  opcache.so

-rwxr-xr-x 1 root root  156004 Mar 19 14:35  pdo_mysql.so

-rwxr-xr-x 1 root root  658468 Mar 19 12:35  xcache.so

        當前一共有 6 個常用擴充套件模組,其中 eaccelerator、opcache、xcache 屬於同類軟體,生產環境中只需安裝一種即可,否則會產生使用衝突。

配置 PHP 加速與快取相關的擴充套件外掛模組:

配置 Memcache/PDO_MYSQL/imagick 模組生效:

        修改 PHP 的配置檔案 /application/php/lib/php.ini :

        ① 執行 vi  /application/php/lib/php.ini 命令,編輯查詢該配置檔案的 extension_dir = "./ " 引數,修改為 extension_dir = "/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/",這個引數對應的路徑就是前文編譯的模組所在的路徑。

        詳細的操作過程如下:  (操作前要備份該配置檔案)

[[email protected] tools]# cd /application/php/lib  

[[email protected] lib]# vi  /application/php/lib/php.ini     

[[email protected] lib]# grep "extension_dir = " php.ini

extension_dir = "/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/"

        ② 在 vim 命令模式下按 Shift + G 鍵跳到檔案結尾增加如下幾行,然後儲存:

        ;--cache ext start by Zhang Lei 2018-3-28--

        extension = memcache.so

        extension = pdo_mysql.so

        extension = imagick.

        ;--cache ext end by Zhang Lei 2018-3-28--

        詳細的操作過程如下:

[[email protected] lib]# vi  /application/php/lib/php.ini

[[email protected] lib]# tail -5 php.ini     

;--cache ext start by Zhang Lei 2018-3-28--

extension = memcache.so

extension = pdo_mysql.so

extension = imagick.so

;--cache ext end by Zhang Lei 2018-3-28--

檢查配置的相關模組生效情況:

        重啟 PHP 服務,編寫測試程式 phpinfo:

[[email protected] lib]# pkill php-fpm

[[email protected] lib]# ps -ef|grep php-fpm|grep -v grep

[[email protected] lib]# /application/php/sbin/php-fpm         

[[email protected] blog]# ps -ef|grep php-fpm|grep -v grep|wc -l

3

[[email protected] conf]# cd /application/nginx/html/blog/

[[email protected] blog]# vi test.php

[[email protected] blog]# cat /application/nginx/html/blog/test.php

<?php phpinfo();

?>

        檢查 Memcache 擴充套件外掛:

        配置好客戶端的 hosts 解析,然後在瀏覽器輸入 www.etiantian.org/test.php 頁面的地址,出現的內容如圖所示:

 

        通過快捷鍵 Ctrl + F 進行頁面搜尋,如下圖所示,表示 Memcached 外掛已生效:

 

        檢查 PDO_MYSQL 擴充套件外掛,如圖所示:

 

        檢查 Imagick 擴充套件外掛,如圖所示:

 

        到此為止,pdo_mysql.so、imagick.so、memcache.so 三個 PHP 的擴充套件模組就全部安裝及配置完畢。

配置 eAcclerator 外掛生效並優化引數:

        配置 eAcclerator 快取目錄:

[[email protected] lib]# cd /application/php/lib/  

[[email protected] lib]# mkdir -p /tmp/eaccelerator     

# 此目錄可以用 tmpfs 記憶體檔案系統或 SSD 固態硬碟來儲存。

[[email protected] lib]# chown -R nginx.nginx /tmp/eaccelerator

[[email protected] lib]# ls -ld /tmp/eaccelerator

drwxr-xr-x 2 nginx nginx 4096 Mar 20 11:36 /tmp/eaccelerator

        配置 eAcclerator 引數,命令如下:

cat   >>   /application/php/lib/php.ini<<EOF

[eaccelerator]

extension=eaccelerator.so

eaccelerator.shm_size="64"

eaccelerator.cache_dir="/tmp/eaccelerator"

eaccelerator.enable="1"

eaccelerator.optimizer="1"

eaccelerator.check_mtime="1"

eaccelerator.debug="0"

eaccelerator.filter=""

eaccelerator.shm_max="0"

eaccelerator.shm_ttl="3600"

eaccelerator.shm_prune_period="3600"

eaccelerator.shm_only="0"

eaccelerator.compress="1"

eaccelerator.compress_level="9"

EOF

[[email protected] lib]# tail -15 php.ini      # 檢查操作後的配置結果。

[eaccelerator]

extension=eaccelerator.so

eaccelerator.shm_size="64"

eaccelerator.cache_dir="/tmp/eaccelerator"

eaccelerator.enable="1"

eaccelerator.optimizer="1"

eaccelerator.check_mtime="1"

eaccelerator.debug="0"

eaccelerator.filter=""

eaccelerator.shm_max="0"

eaccelerator.shm_ttl="3600"

eaccelerator.shm_prune_period="3600"

eaccelerator.shm_only="0"

eaccelerator.compress="1"

eaccelerator.compress_level="9"

提示:關於 eAcclerator 配置引數的詳細說明見<< Web叢集實戰 P266 >>

        檢查 eAcclerator 加速配置情況:

[[email protected] lib]# /application/php/bin/ph

phar        phar.phar   php         php-config  phpize      

[[email protected]mp01 lib]# /application/php/bin/php -v

PHP 5.3.27 (cli) (built: Dec 23 2017 16:24:25)

Copyright (c) 1997-2013 The PHP Group

Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies

    with eAccelerator v0.9.6, Copyright (c) 2004-2010 eAccelerator, by eAccelerator        

        重啟 PHP 服務:

[[email protected] lib]# pkill php-fpm

[[email protected] lib]# ps -ef|grep php-fpm|grep -v grep

[[email protected] lib]# /application/php/sbin/php-fpm

[[email protected] lib]# ps -ef|grep php-fpm|grep -v grep|wc -l

3

        通過 phpinfo 檢查 eAcclerator 外掛結果,如圖所示:

 

        此時檢視快取目錄 /tmp/eaccelerator,結果如下:

[[email protected] lib]# ls -l /tmp/eaccelerator

total 64

drwxrwxrwx 18 root root 4096 Mar 20 11:59 0

drwxrwxrwx 18 root root 4096 Mar 20 11:59 1

drwxrwxrwx 18 root root 4096 Mar 20 11:59 2

drwxrwxrwx 18 root root 4096 Mar 20 11:59 3

drwxrwxrwx 18 root root 4096 Mar 20 11:59 4

drwxrwxrwx 18 root root 4096 Mar 20 11:59 5

drwxrwxrwx 18 root root 4096 Mar 20 11:59 6

drwxrwxrwx 18 root root 4096 Mar 20 11:59 7

drwxrwxrwx 18 root root 4096 Mar 20 11:59 8

drwxrwxrwx 18 root root 4096 Mar 20 11:59 9

drwxrwxrwx 18 root root 4096 Mar 20 11:59 a

drwxrwxrwx 18 root root 4096 Mar 20 11:59 b

drwxrwxrwx 18 root root 4096 Mar 20 11:59 c

drwxrwxrwx 18 root root 4096 Mar 20 11:59 d

drwxrwxrwx 18 root root 4096 Mar 20 11:59 e

drwxrwxrwx 18 root root 4096 Mar 20 11:59 f

提示:可以看到 /tmp/eaccelerator 快取目錄下也有內容了。以上兩個檢查可以確認配置是否生效。

[[email protected] lib]# find /tmp/eaccelerator -type f|xargs file

/tmp/eaccelerator/5/8/eaccelerator-1502.960071: data

/tmp/eaccelerator/5/8/eaccelerator-1502.870071: data

/tmp/eaccelerator/5/8/eaccelerator-1502.670071: data

/tmp/eaccelerator/0/c/eaccelerator-1502.410171: data

/tmp/eaccelerator/6/8/eaccelerator-1502.680071: data

/tmp/eaccelerator/2/e/eaccelerator-1502.556571: data

/tmp/eaccelerator/f/b/eaccelerator-1502.300171: data

/tmp/eaccelerator/3/e/eaccelerator-1502.085171: data

/tmp/eaccelerator/b/8/eaccelerator-1502.571071: data

/tmp/eaccelerator/9/7/eaccelerator-1502.978961: data

/tmp/eaccelerator/1/c/eaccelerator-1502.830171: data

提示:重啟 PHP 服務後,通過訪問 phoinfo 頁面,就會有以上快取檔案。以上就是 cache 的內容,而且是 phpinfo 的頁面快取內容,型別為 data 。

        使用 tmpfs 優化 eAcclerator 快取目錄:

        tmpfs 是一種基於記憶體的檔案系統,通常使用 tmpfs 作為資料臨時儲存,比本地磁碟儲存快很多,此方法適用於臨時使用的各類快取場景。例如:上傳圖片時很多軟體預設在 /tmp 下臨時快取切圖、存放 session 資料,則可以讓 /tmp 使用 tmpfs 檔案系統來加快訪問效率。此處將快取目錄 /tmp/eaccelerator 掛載到 /tmp/eaccelerator 檔案系統上,讓訪問快取的資料更快。

        詳細操作如下所示:

[[email protected] lib]# mount -t tmpfs -o size=16m tmpfs /tmp/eaccelerator       

# 建立16M 大小的 tmpfs 型別檔案系統掛載到 /tmp/eaccelerator

[[email protected] lib]# df -h     # 檢查掛載情況。

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3       6.6G  3.2G  3.1G  51% /

tmpfs           112M     0  112M   0% /dev/shm

/dev/sda1       190M   34M  146M  19% /boot

tmpfs            16M     0   16M   0% /tmp/eaccelerator

[[email protected] lib]# grep eacc /proc/mounts       # 檢查掛載情況。

tmpfs /tmp/eaccelerator tmpfs rw,relatime,size=16384k 0 0

[[email protected] lib]# vi /etc/fstab       # 配置永久掛載,生產場景 size 可根據需要調整。

[[email protected] lib]# tail -1 /etc/fstab

tmpfs                   /tmp/eaccelerator       tmpfs   size=16m        0 0

[[email protected] lib]# umount /tmp/eaccelerator

[[email protected] lib]# grep eacc /proc/mounts

[[email protected] lib]# mount -a    #  測試永久掛載。

[[email protected] lib]# grep eacc /proc/mounts

tmpfs /tmp/eaccelerator tmpfs rw,relatime,size=16384k 0 0

到此為止,eaccelerator 外掛安裝配置完成。

配置 XCache 外掛加速:

        提示:XCache 和 eAcclerator 功能相近,安裝一個即可。配置 XCache 之前應刪除 eAcclerator 的所有配置。

        xcache.ini 引數說明:        

        XCache 軟體的解壓目錄 /home/oldboy/tools/xcache-3.2.0/ 下存在一個名字為 xcache.ini 的配置檔案,即 XCache 的配置檔案。(XCache 配置檔案引數說明見 << Web 叢集實戰 P270 >>)

        修改 php.ini 配置 XCache:

        ① 先在配置 XCache 引數前加個配置分界符,詳細的操作過程如下:

[[email protected] ~]# cd /application/php/lib/

[[email protected] lib]# echo >>php.ini

[[email protected] lib]# echo ';xcache config by Zhang Lei 2018-3-29-------' >>php.ini

[[email protected] lib]# tail -2 php.ini

                                                                    

;xcache config by Zhang Lei 2018-3-29-------

        ② 編輯 xcache.ini ,修改 XCache 的配置引數:

[[email protected] lib]# vim /home/oldboy/tools/xcache-3.2.0/xcache.ini   # 調整關鍵引數。   

xcache.size  =                  256M

xcache.count =                 2

xcache.ttl   =                     86400

xcache.gc_interval =        3600

xcache.var_size  =           64M

        ③ 將修改後的 xcache.ini 合併到 php.ini 結尾:

[[email protected] lib]# cat /home/oldboy/tools/xcache-3.2.0/xcache.ini >>php.ini

[[email protected] lib]# tail -85 php.ini|egrep -v "^;|^$"

[xcache-common]

extension = xcache.so

[xcache.admin]

xcache.admin.enable_auth = On

xcache.admin.user = "mOo"

xcache.admin.pass = "md5 encrypted password"

[xcache]

xcache.shm_scheme =        "mmap"

xcache.size  =               256M

xcache.count =                 2

xcache.slots =                8K

xcache.ttl   =                 86400

xcache.gc_interval =           3600

xcache.var_size  =            64M