PHP安裝eAccelerator

eAccelerator是一個很是優秀的PHP加速器,經過緩存編譯以後的PHP代碼文件,使得PHP編譯對服務器的開銷幾乎爲零。eAccelerator自己的開銷也是極少的 php

 

最新的PHP5.4.8安裝eAccelerator, html

須要注意的是要安裝高版本的,低了編譯不過去。 linux

官網:http://eaccelerator.net/ git

 

注意PHP5.5之後暫時不能使用eAccelerator github

緣由:其中一個我知道的是eAccelerator中使用了 web

php_register_info_logo(EACCELERATOR_VERSION_GUID, "text/plain", (unsigned char*)EACCELERATOR_VERSION_STRING, sizeof(EACCELERATOR_VERSION_STRING));  
php_register_info_logo(EACCELERATOR_LOGO_GUID,    "image/gif",  (unsigned char*)eaccelerator_logo, sizeof(eaccelerator_logo));
php_register_info_logo在PHP5.5中已經移除了

 

1.下載安裝eAccelerator apache

#wget https://github.com/eaccelerator/eaccelerator/tarball/master 緩存

最新的版本是eaccelerator-42067ac.tar.gz 服務器

#tar zxvf eaccelerator-42067ac.tar.gz session

須要phpize安裝php擴展,若是不明白phpize能夠看這個:http://blog.csdn.net/21aspnet/article/details/8193482

須要注意的是須要寫php的安裝路徑對應的phpize下面的php-config也是

 /usr/local/webserver/php/bin/phpize

#./configure --enable-eaccelerator=shared --with-php-config=/usr/local/webserver/php/bin/php-config

make

須要注意的是要安裝高版本的,低了編譯不過去。

make install

 

須要記住生成的提示信息下面配置php要用到

/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-

20100525/

2.配置php.ini配置文件

#這個是我機器的so位置
extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/eaccelerator.so" 
#這個是設置一個緩存大小
eaccelerator.shm_size="64" 
#緩存目錄
eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"

#網站目錄,把解開的eAccelerator 的源碼包裏的control.php 文件複製到你的WEB 服務器中的一個目錄下,使其它以經過http 訪問,若是不加那麼看不到緩存的頁面列表,可是仍是能夠看到內存信息

eaccelerator.allowed_admin_path=/usr/www/

eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

eaccelerator.keys     = "disk_only"
eaccelerator.sessions = "disk_only"
eaccelerator.content  = "disk_only"

設置內容緩存的存放的地方,能夠設置爲:
shm_and_disk 在共享緩存和硬盤(默認值)
shm      默認存在共享內存,若是共享內存已滿或大小超過 "eaccelerator.shm_max" 的值,就存到硬盤
shm_only    只存放在共享內存
disk_only    只存放在硬盤
none      不緩存數據

這裏爲了查看效果設置爲存在硬盤

 

增長權限

#mkdir /usr/local/webserver/eaccelerator_cache
#chmod 777 /usr/local/webserver/eaccelerator_cache

 

3.測試查看phpinfo()

 

4.查看緩存文件夾

爲了直觀因此截圖圖形界面

這說明成功生成了緩存

 

5.更好的監控方式

eAccelerator控制面板的地址,安裝包裏有一個control.php文件,把它複製到網站的任意目錄,能夠用它查看和管理,這個必須指定,不然查看緩存內容的時候會出錯,訪問時候默認的用戶名是:admin,密碼:eAccelerator

 

注意,以前的php.ini配置文件加上這個配置就會看到明細信息

eaccelerator.allowed_admin_path=/usr/www/

 

重啓apache則會清空緩存

 

文檔:

eaccelerator.shm_size="8"
eAccelerator 能夠使用的共享內存的數量 (以MB爲單位) . "0" 是指操做系統的默認值,默認值是 "0",可根據服務器的實際狀況來調整:1六、3二、6四、128都是能夠的。

eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"
這個目錄是給磁盤緩存使用,eAccelerator 在這裏儲存預先編譯好的代碼,進程數據,內容以及用戶的自定義內容。一樣的數據也能被儲存在共享內存中 (這樣能夠提升訪問速度)

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

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

eaccelerator.check_mtime="1"
打開或者關閉 PHP 的文件修改檢查,"1" 是指打開,"0" 是指關閉。默認值是 "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="3600"
當 eAccelerator 獲取新腳本的共享內存大小失敗時,它將從共享內存中刪除全部在最後 "shm_ttl" 秒內沒有存取的腳本緩存。默認值爲"0",爲不從共享內存中刪除任何緩存文件。

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

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

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

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

eaccelerator.keys = "disk_only"
eaccelerator.sessions = "disk_only"
eaccelerator.content = "disk_only"
設置內容緩存的存放的地方,能夠設置爲:
shm_and_disk 在共享緩存和硬盤(默認值)
shm      默認存在共享內存,若是共享內存已滿或大小超過 "eaccelerator.shm_max" 的值,就存到硬盤
shm_only    只存放在共享內存
disk_only    只存放在硬盤
none      不緩存數據

 

6.測試性能

快速排序代碼

<?php  
function quickSort($arr)  
{  
    $len    = count($arr);  
    if($len <= 1) {  
        return $arr;  
    }  
    $key = $arr[0];  
    $left_arr    = array();  
    $right_arr    = array();  
  
    for($i=1; $i<$len; $i++){  
        if($arr[$i] <= $key){  
            $left_arr[] = $arr[$i];  
        } else {  
            $right_arr[] = $arr[$i];  
        }  
    }  
  
    $left_arr    = quickSort($left_arr);  
    $right_arr    = quickSort($right_arr);  
    return array_merge($left_arr, array($key), $right_arr);  
}  
  
  
$arr = array(6,3,8,5,9,2,10);  
echo '<pre>';  
print_r(quickSort($arr));  
?>

測試方法

#ab -n 1000 http://192.168.2.107/quicksort.php

連續測試幾回,主要的性能指標是Requests per second

 

左邊是沒有使用eAccelerator 時的狀況,右邊是使用了的

連續測試10次,基本數據仍是比較穩定的。

使用了eAccelerator 時比沒使用的要好!

使用strace查看C語言級別的php源碼       

能夠看eAccelerator緩存是怎麼被讀取的完成過程

 

擴展閱讀:

eAccelerator提供以下的API接口和文件:(下述文件均在源碼包的doc/php/目錄下)

文件列表:

cache.php

dasm.php

encoder.php

info.php

loader.php

session.php

shared_memory.php

接口列表:

array eaccelerator_cached_scripts ()

void eaccelerator_cache_output (string $key, string $eval_code, [int $ttl = 0])

void eaccelerator_cache_page (string $key, [int $ttl = 0])

void eaccelerator_cache_result (string $key, string $code, [int $ttl = 0])

void eaccelerator_caching (boolean $flag)

void eaccelerator_clean ()

void eaccelerator_clear ()

array eaccelerator_dasm_file (mixed $filename)

mixed eaccelerator_encode (mixed $src, [mixed $prefix = ''], [string $pre_content = ''], [string $post_content = ''])

void eaccelerator_gc ()

mixed eaccelerator_get (string $key)

array eaccelerator_info ()

array eaccelerator_list_keys ()

void eaccelerator_load ()

boolean eaccelerator_lock (string $key)

void eaccelerator_optimizer (boolean $flag)

void eaccelerator_purge ()

boolean eaccelerator_put (string $key, mixed $value, [int $ttl = 0])

array eaccelerator_removed_scripts ()

boolean eaccelerator_rm (string $key)

void eaccelerator_rm_page (string $key)

boolean eaccelerator_set_session_handlers ()

boolean eaccelerator_unlock (string $key)

有關上述文檔詳細說明請參考官方文檔

下面有部分網友翻譯後的接口說明:

eaccelerator_put($key, $value, $ttl=0)
   將 $value 以 $key 爲鍵名存進緩存(php4下支持對像類型,看源碼好像zend2裏不支持了),$ttl 是這個緩存的生命週期,單位是秒,省略該參數或指定爲 0 表示不限時,直到服務器重啓清空爲止。
  
eaccelerator_get($key)
   根據 $key 從緩存中返回相應的 eaccelerator_put() 存進去的數據,若是這項緩存已通過期或不存在那麼返回值是 NULL
  
eaccelerator_rm($key)
   根據 $key 移除緩存
  
eaccelerator_gc()
   移除清理全部已過時的 key
  
eaccelerator_lock($key)
   爲 $key 加上鎖定操做,以保證多進程多線程操做時數據的同步。須要調用 eaccelerator_unlock($key) 來釋放這個鎖或等待程序請求結束時自動釋放這個鎖。
   例如:
   <?php
     eaccelerator_lock(「count」);
     eaccelerator_put(「count」,eaccelerator_get(「count」)+1));
   ?>
  
eaccelerator_unlock($key)
   根據 $key 釋放鎖
  
eaccelerator_cache_output($key, $eval_code, $ttl=0)
   將 $eval_code 代碼的輸出緩存 $ttl 秒,($ttl參數同 eacclerator_put)
   例如:
   <?php eaccelerator_cache_output(‘test’, ‘echo time(); phpinfo();’, 30); ?>
  
eaccelerator_cache_result($key, $eval_code, $ttl=0)
   將 $eval_code 代碼的執行結果緩存 $ttl 秒,($ttl參數同 eacclerator_put),相似 cache_output
   例如:
   <?php eaccelerator_cache_result(‘test’, ‘ time() . 「Hello」;’, 30); ?>
  
eaccelerator_cache_page($key, $ttl=0)
   將當前整頁緩存 $ttl 秒。
   例如:
   <?php
     eaccelerator_cache_page($_SERVER['PHP_SELF'].’?GET=’.serialize($_GET),30);
     echo time();
     phpinfo();
   ?>
  
eaccelerator_rm_page($key)
   刪除由  eaccelerator_cache_page() 執行的緩存,參數也是 $key

二、PHP代碼中使用eAccelerator加速

另外,在PHPCMS裏面已經集成了對eAccelerator的支持,下面是一段來自PHPCMS裏面的代碼

class cache
{
    function __construct()
    {
    }

    function cache()
    {
		$this->__construct();
    }

    function get($name)
    {
        return eaccelerator_get($name);
    }

    function set($name, $value, $ttl = 0)
    {
        eaccelerator_lock($name);
        return eaccelerator_put($name, $value, $ttl);
    }

    function rm($name)
    {
        return eaccelerator_rm($name);
    }

    function clear()
    {
        return eaccelerator_gc();
    }
}
相關文章
相關標籤/搜索