現在基於PHP的網站越來越多,也有很多成熟的cms程式方便使用。在網站的流量逐漸增大之後,伺服器對CPU及記憶體的要求也就越來越高。一味的增加硬體成本是不可取的,採用合理的緩衝策略是減少伺服器訪問壓力的有效方法。tennfy將會在後面陸續介紹一些php及資料庫的緩衝方法。今天主要來介紹使用Zend Opcache加速PHP。
PHP緩衝原理介紹
PHP是指令碼語言,在解譯器完成對指令碼代碼的分析後,會將它們產生可以直接啟動並執行中間代碼,也稱為作業碼(Operate Code,opcode)。Opcode cache的目地是避免重複編譯,減少CPU和記憶體開銷。如果動態內容的效能瓶頸不在於CPU和記憶體,而在於I/O操作,比如資料庫查詢帶來的磁碟I/O開銷,那麼opcode cache的效能提升是非常有限的。但是既然opcode cache能帶來CPU和記憶體開銷的降低,這總歸是好事。
現代作業碼緩衝器( APC、 eAccelerator、 XCache以及Zend Opcache)使用共用記憶體進行儲存,並且可以直接從中執行檔案,而不用在執行前“還原序列化”代碼。這將帶來顯著的效能加速,通常降低了整體伺服器的記憶體消耗,而且很少有缺點。其中Zend Opcache外掛程式作為zend公司官方推出的快取區外掛程式,緩衝效果更好,可以保證與最新PHP版本的相容與更新。因此,tennfy推薦安裝Zend Opcache進行php的緩衝加速。
Zend Opcache已經整合在了PHP 5.5裡面,但也支援低版本的 PHP 5.2.*, 5.3.*, 5.4.*,下面介紹Zend Opcache的安裝方法。
Zend Opcache安裝方法
安裝方法如下:
# Install "pecl" via php-pear
apt-get install -y php-pear
# Install build dependencies
apt-get install -y build-essential php5-dev
# Install Zend OpCache
pecl install zendopcache-7.0.5
添加opcache.ini檔案
vi /etc/php5/mods-available/opcache.ini
在opcache.ini中加入如下幾行
zend_extension=/usr/lib/php5/20100525+lfs/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
其中128的意思是給它分配128M記憶體。
最後將該檔案連結至conf.d目錄下
ln -s /etc/php5/mods-available/opcache.ini /etc/php5/conf.d/20-opcache.ini
修改完成後,重啟nginx以及php。
查看Zend Opcache效果
輸入php -v,得到如下資訊
PHP 5.4.45-1~dotdeb+7.1 (cli) (built: Sep 5 2015 00:21:03)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.5, Copyright (c) 1999-2015, by Zend Technologies
列印出phpinfo()資訊,可以看到Zend OPcache的相關資訊:
在phpinfo()資訊中, 目前來看有兩條資訊猶為重要:
Cache hits (進階快取命中)
Cache misses (進階緩衝未命中)
通過以上兩條資訊就可以觀察到緩衝情況。
注意事項
安裝完成後,最好將php5-dev卸載:
apt-get remove --purge build-essential php5-dev
不要同時安裝APC、 eAccelerator、 XCache以及Zend Opcache。