2009年2月23日 星期一

Linux下安裝eaccelerator

PHP 加速器的調校(php-eaccelerator)

由於 PHP 屬於直譯語言,因此當放在 Web 伺器器上的 PHP 程式碼被瀏覽者所讀取時,系統為了要執行 PHP 程式碼就必須要使用直譯器(interpreter),將 PHP 程式碼翻譯成電腦系統看得懂(或可以執行)的語言。這個直譯的動作是非常耗費系統資源的,而直譯語言的特性偏偏就是每次執行前都要先進行直譯的動作,因此當您放在 Web 伺服器上的 PHP 程式碼被 1000 個 client 讀取時,系統就要進行 1000 次的直譯動作。而 PHP 加速器的功能就是會把被這些 PHP 程式碼快取(Cache)起來,也就是同一支程式碼只要被直譯一次而已,藉此大幅降低系統的負載。自己個人的經驗是:若你的 Web 伺服器流量非常大,有沒有使用 PHP 加速器會有非常大的差別。

php-eaccelerator 的安裝很容易,但麻煩的是後續的調整。一般來講,若你會需要安裝加速器通常就代表你遇上了效能的瓶頸,也就是系統負載過大所以才需要安裝它;但是 php-eaccelerator 有 BUG,當系統負載過大,php-eaccelerator 需要消除 Share Memory 中的老舊資料時,會導致 apache 出現如下的錯誤訊息並使 CPU 使用率衝上 100%,最後終將致使伺服器當機。


[Wed Feb 28 14:39:40 2007] [notice] child pid 18449 exit signal Segmentation fault (11)


下載並安裝php eaccelerator

#cd /usr/local/src
#wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
#tar -jxvf eaccelerator-0.9.5.3.tar.bz2
#cd eaccelerator-0.9.5.3
#phpize
#./configure --enable-eaccelerator=shared --with-php-config=/usr/bin/php-config
#make
#make install


3. 建立 eaccelerator 的暫存資料,重點在於權限要設定正確!

# mkdir /tmp/eaccelerator
# chmod 777 /tmp/eaccelerator


就是因為負載過高才需要裝它,偏偏負載過高裝了它又會造成伺服器當機,很矛盾不是嗎?所幸經過適當的調整後,即可避免上述的情況發生。

修改/ect/php.ini


[eaccelerator]
extension=eaccelerator.so
;預設是32MB,這裡設為500MB
eaccelerator.shm_size="500"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
;預設是 1 (開啟),這裡設為 0 (關閉)
eaccelerator.optimizer="0"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.log_file = "/var/log/httpd/eaccelerator_log"
eaccelerator.filter=""
eaccelerator.shm_max="0"
;預設是3600,這裡設為0,也就是不移除Share Memory中的任何資料。
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"


大致上要注意的有以下幾點:

1. 調高php-eaccelerator可使用的Share Memory大小:
eaccelerator.shm_size = "500"
.
2. 關閉最佳化功能
eaccelerator.optimizer = "0"
.
3. 禁止php-eaccelerator清除Share Memory中的資料:
eaccelerator.shm_ttl = "0"
eaccelerator.shm_prune_period = "0"
.
4. 每日定時清除cache資料與Share Memory,並重新啟動httpd。
新增 /etc/cron.daily/restart_httpd:
/sbin/service httpd stop
rm -rf /tmp/php-eaccelerator/*
/sbin/service httpd start

參考:http://forum.slime.com.tw/thread210119.html

沒有留言:

wibiya widget