天天看點

php服務緩存加速

PHP服務加速緩存優化

    PHP緩存原理:

        當用戶端請求一個PHP程式時,伺服器的PHP引擎會解析改PHP程式,并将其編譯為特定的操作碼(Operate Code 簡稱 opcode),

    改檔案是執行PHP代碼後的一種二進制表示形式。預設情況下,這個編譯好的操作碼檔案由PHP引擎執行後丢棄。而操作碼緩存的原理:

    将編譯後的操作碼儲存下來,并放到共享記憶體中,下一次調用PHP時重用。(節省了PHP引擎的編譯時間)

    LA(N)MP環境PHP緩存加速器的原理:

    1)apache(nginx)接收到用戶端的PHP程式通路請求。

    2)apache(nginx)把程式傳遞給PHP處理子產品libphp5.so(php的FCGI--php-fpm)程序。

    3)PHP引擎(php-fpm程序)讀取磁盤上的PHP檔案,并将器加載到記憶體中解析。

    4)PHP處理子產品libphp5.so(php解析器php.ini)将PHP源碼編譯成cpdode,把cpcode緩存起來。

    5)apache(nginx)接收到用戶端的請求後,PHP引擎直接讀取opcode檔案。如果沒有找到則重複1-4步。建立緩存。

補充知識:

    locale 計算機軟體運作的語言環境:

        # locale

        LANG=en_US.UTF-8             

        LC_CTYPE="en_US.UTF-8"

        LC_NUMERIC="en_US.UTF-8"

        LC_TIME="en_US.UTF-8"

        LC_COLLATE="en_US.UTF-8"

        LC_MONETARY="en_US.UTF-8"

        LC_MESSAGES="en_US.UTF-8"

        LC_PAPER="en_US.UTF-8"

        LC_NAME="en_US.UTF-8"

        LC_ADDRESS="en_US.UTF-8"

        LC_TELEPHONE="en_US.UTF-8"

        LC_MEASUREMENT="en_US.UTF-8"

        LC_IDENTIFICATION="en_US.UTF-8"

        LC_ALL=

locale 把按照所涉及到的使用習慣的各個方面分成12 大類,這12 個大類分别是:

    語言符号及其分類(LC_CTYPE)

    數字(LC_NUMBERIC)

    比較習慣(LC_COLLATE)

    時間顯示格式(LC_TIME)

    貨币機關(LC_MONETARY)

    資訊主要是提示資訊,錯誤資訊,狀态資訊,标題,标簽,按鈕和菜單等(LC_MESSAGES)

    行麼書寫方式(LC_NAME)

    位址書寫方式(LC_ADDRESS)

    電話号碼書寫方式(LC_TELEPHONE)

    度量衡表達方式(LC_MEASUREMENT)

    預設紙張尺寸大小(LC_PAPER)

    對locale 自身包含資訊的概述(LC_IDENTIFICATION)

而這些資訊的配置通常放在/usr/share/i18n/locales 目錄下。

    部分軟體需求Perl.為了解決Perl的一些環境問題帶來錯誤。可以通過修改環境變量來避免。

     # echo 'export LC_ALL=C' >> /etc/profile

     # tail  -1 /etc/profile

     # source /etc/profile

    安裝Perl相關的軟體依賴包  # yum install perl-devel 或 # yum install perl-CPAN

    安裝 PHP XCache 緩存加速子產品

        X Cache 把PHP程式編譯後的資料(opcode)緩存到共享記憶體裡,避免相同的程式重複編譯。

        使用者請求相同的PHP程式時,可以直接使用緩存中已編譯好的資料,提高通路速度。

        # wget https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.bz2 --no-check-certificate

        # tar jxvf xcache-3.2.0.tar.bz2

        # /application/php/bin/phpize 

    phpize 作用:用來擴充PHP擴充子產品的,通過phpize可以建立PHP的外挂子產品。

        提供軟體包平台環境分析和編譯安裝的必須的工具。

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

        # make

        # make install

        # ll /application/php5.5.38/lib/php/extensions/no-debug-non-zts-20121212/

        看看是否含有 xcache.so 表明 安裝是否完成。

    安裝資料庫緩存及其它PHP擴充插件

        memcached緩存軟體:mem記憶體 cache緩存。d 即daemon(伺服器端程序模式服務)

        memcached分2部分:伺服器端(memcached)和用戶端(memcache)

    一般場景:資料存放在資料庫中, web通路的時候,要不停的通路資料庫。加入memcached好處:通過自身記憶體中緩存

    資料庫的查詢結果,減少資料庫的通路次數,通路記憶體比通路硬碟效率要高。

    memcached的服務的工作步驟:

        1.先檢查memcached服務的緩存中是否存在。如果存在直接傳回請求資料

        2.memcached不存在資料,通路資料庫

        3.資料庫取出資料,傳回給用戶端

        4.同時把新取到的資料緩存一份給memcached服務緩存。備用。

    memcache 用戶端PHP擴充插件(memcache2.2.7.tgz)

        # wget http://pecl.php.net/get/memcache-2.2.7.tgz

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

        是否包含 memcache.so

    安裝:PDO_MYSQL擴充子產品

    下載下傳位址:# wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz

    一般在編譯PHP的時候以參數的形式加入此子產品:--with-pdo-mysql=mysqlnd

    如果源碼包編譯安裝和前面的安裝無異(略步驟)

        平台分析如下:

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

    安裝圖像處理程式及imagick 擴充子產品

        安裝圖像軟體:ImageMagick

        安裝imagick子產品

        # wget http://pecl.php.net/get/imagick-3.4.3.tgz

        # /application/php/bin/phpize

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

    配置子產品生效:修改php.ini檔案。把加載子產品的位址修改。

          extension_dir = "/application/php/lib/php/extensions/no-debug-non-zts-20121212"

          extension=memcache.so

          extension=imagick.so

    配置XCache 插件加速

        1.首先修改 xcache 自帶的配置檔案  xcache.ini ,然後将修改的檔案添加到 php.ini(引擎檔案)檔案的後面

        # grep -vE "^;|^$" /data/xcache-3.2.0/xcache.ini > xcache.ini.bak

        其中主要修改:一下參數

        xcache.size  =               256M 

        xcache.count =                 2  

        xcache.ttl   =                86400 

        xcache.gc_interval =          3600 

        xcache.var_size  =            64M   

        **** xcache.size   非0表示啟用緩存。後面的數值代表允許mmap(一種記憶體共享機制)的最大值

        xcache.count    官方推薦伺服器CPU的個數   # grep -c processor /proc/cpuinfo(比對CPU個數)

        xcache.ttl    ttl(time to live) 設定cache對象的生存期

        xcache.gc_interval      回收器掃描過期對象回收記憶體空間的時間間隔(如果設為0.則不回收,啟動緩存必須開啟回收)

        xcache.var_size        變量的緩存

        # cat xcache.ini.bak >> /application/php/lib/php.ini

        因為 XCache 使用共享記憶體作為存儲空間,如果有必要可以調整共享記憶體大小參數。

        # tail /etc/sysctl.conf 

        kernel.msgmnb = 65536

        # Controls the maximum size of a message, in bytes

        kernel.msgmax = 65536

        # Controls the maximum shared segment size, in bytes

        kernel.shmmax = 68719476736

        # Controls the maximum number of shared memory segments, in pages

        kernel.shmall = 4294967296

        2.重新啟動PHP檢視xcache加載情況

        # pkill php-fpm

        # /application/php/sbin/php-fpm 

        # /application/php/bin/php -v

        PHP 5.5.38 (cli) (built: Feb  1 2017 22:43:58) 

        Copyright (c) 1997-2015 The PHP Group

        Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies

            with XCache v3.2.0, Copyright (c) 2005-2014, by mOo

            with XCache Cacher v3.2.0, Copyright (c) 2005-2014, by mOo

        3.配置web界面的檢視xcache緩存加速資訊。

            修改php.ini 檔案中的

            xcache.admin.user = "mOo"    #把mOo 替換

            xcache.admin.pass = "md5 encrypted password"

            # 這裡是利用md5算法生成加密串

            例如: 

            # echo -n '123456' | md5sum

            e10adc3949ba59abbe56e057f20f883e  -

            将内容替換成e10adc3949ba59abbe56e057f20f883e

<a href="http://s2.51cto.com/wyfs02/M02/8D/47/wKioL1iVnzmAZEr1AAExUKyUfh0088.png-wh_500x0-wm_3-wmp_4-s_4111851425.png" target="_blank"></a>

            引用xcache相關的頁面;

            # cd /data/xcache-3.2.0

            # cp -a ./htdocs/ /application/nginx/html/blog/xadmin

            #  chown -R nginx.nginx /application/nginx/html/blog/xadmin

            # pkill php-fpm

            # /application/php/sbin/php-fpm 

    下面附上 :壓測效果對比:(昨天為沒有加入xcache緩存的資料,右邊為加入xcache緩存效果)

<a href="http://s4.51cto.com/wyfs02/M01/8D/47/wKioL1iVn0_BULmwAAEIbAFhVH8096.png-wh_500x0-wm_3-wmp_4-s_151701574.png" target="_blank"></a>

本文轉自 swallow_zys  51CTO部落格,原文連結:http://blog.51cto.com/12042068/1894905,如需轉載請自行聯系原作者