一、發揮PHP 7高效能的幾個要點
PHP 7相對於之前的PHP版本來說可以說效能有了質的飛躍,但是所謂“好馬配好鞍,好車配風帆”,想要發揮PHP 7的效能優勢,還需要從以下幾個方面做準備:(此部分引自PHP7核心開發人員, Yaf, Yar, Yac等項目作者:Laruence)。
1. 記得啟用Zend Opcache,啟用Opcache非常簡單, 在php.ini設定檔中加入:
zend_extension=opcache.soopcache.enable=1opcache.enable_cli=1"
2. 使用新的編譯器, 推薦GCC 4.8以上, 因為只有GCC 4.8以上PHP 7才會開啟Global Register for opline and execute_data支援, 這個會帶來5%左右的效能提升。
3. 開啟HugePage有利於PHP 7更快, 首先在系統中開啟HugePages, 然後開啟Opcache的huge_code_pages,以CentOS 6.5為例, 通過命令:$sudo sysctl vm.nr_hugepages=512,分配512個預留的大頁記憶體:
$ cat /proc/meminfo | grep HugeAnonHugePages: 106496 kBHugePages_Total: 512HugePages_Free: 504HugePages_Rsvd: 27HugePages_Surp: 0Hugepagesize: 2048 kB
然後在php.ini中加入:opcache.huge_code_pages=1,這樣一來, PHP會把自身的text段, 以及記憶體配置中的huge都採用大記憶體頁來儲存, 減少TLB miss, 從而提高效能.
4. 開啟Opcache File Cache(實驗性), 通過開啟這個, 可以讓Opcache把opcode緩衝緩衝到外部檔案中, 對於一些指令碼, 會有很明顯的效能提升。方法是在php.ini中加入:opcache.file_cache=/tmp。這樣PHP就會在/tmp目錄下Cache一些Opcode的二進位匯出檔案, 可以跨PHP生命週期存在.
5. PGO。如果你的PHP是專門為一個專案服務, 比如只是為你的Wordpress, 或者drupal, 或者其他什麼, 那麼你就可以嘗試通過PGO, 來提升PHP, 專門為你的這個項目提高效能。具體的, 以wordpress 4.1為最佳化情境.. 首先在編譯PHP的時候首先:$ make prof-gen。
6、然後用你的項目訓練PHP, 比如對於Wordpress:$ sapi/cgi/php-cgi -T 100 /home/huixinchen/local/www/htdocs/wordpress/index.php >/dev/null,也就是讓php-cgi跑100遍wordpress的首頁, 從而產生一些在這個過程中的profile資訊。最後:
$ make prof-clean$ make prof-use && make install
7、這個時候你編譯得到的PHP7就是為你的項目量身打造的最高效能的編譯版本。
二、PHP 7安裝與編譯
1、PHP 7官網:
- 1、官網:http://php.net/
- 2、下載:http://php.net/downloads.php
2、動手能力強的朋友,可以自己直接到官方下載PHP 7,然後手動編輯安裝。如果你已經習慣使用lnmp.org站長的LNMP一鍵安裝包,可以試試發布LNMP 1.3測試版,已經增加了增加php7支援:網站平滑遷移到LNMP或LAMP建站環境的方法 。
3、OneinStack提供的LNMP安裝包已經有了PHP 7一鍵安裝了,在執行指令碼的時候,可以選擇PHP 7安裝,PHP 7目前只有官方內建的Zend Opcache擴充可供安裝。
4、OneinStack安裝PHP 7安裝成功。
5、這是PHP 7資訊顯示。
6、這是OneinStack提供的PHP 7的Opcache控制台。
三、PHP 7與老版本PHP、HHVM效能對比
1、這是國外開發人員測試的PHP 7與PHP 5.6在Wordpress、Drupal等熱門程式下表現的效能,結果很明顯PHP 7效能提升很多。
2、PHP 7對於Wordpress等程式來說,不僅僅提升單個執行速度,隨著Wordpress運行在PHP 7的時間越久,效能提升就更多。
3、上文也說到PHP 7對於PHP的效能提升在某些方面已經超過了HHVM,這是國外zend.com官網給出的PHP 5.6、PHP 7、HHVM在不同的程式下執行效率對比結果。
4、在專業開源的電子商務系統Magento上測試PHP 5.6、PHP 7、HHVM的執行效率,PHP 7是PHP 5.6運行速度的兩倍,而記憶體佔用還比PHP 5.6低30%。
5、Drupal 8上測試PHP 7的效率是最快的,已經超過了HHVM。
6、Wordpress測試時發現,PHP 5.6執行需要佔用100MB記憶體,而PHP 7隻要25MB。
7、在不同的程式執行速度上,PHP 7顯然已經領跑,Ruby 2.1、Python 2.7.8、Perl 5.18.4都不及PHP 7。
四、PHP 7效能測試結果報告
1、空說無憑,PHP 7運行程式的效能到底如何呢?這裡部落以一個全新的Wordpress為測試對象,運行在PHP 7上Wordpress首頁載入時間測試顯示0.029秒,記憶體是3.39MB。
2、這是同樣的Wordpress頁面運行PHP 5.6上的頁面載入時間:1.955秒,記憶體佔用了3.92MB。從資料上看,PHP 7已經完勝了PHP 5.6了。
3、PHP 7運行Wordpress的效率相對於之前的版本確實有了質的提升,為了全面瞭解PHP 7的效能,這裡按照網站伺服器壓力Web效能測試的方法,用Webbench類比10秒內200、400個串連數,速度都是8000頁面/分以上。
4、此時,VPS伺服器系統負載是3.49。
5、把類比的串連數提高到1600個,速度依然保持在8000頁面/分以上。
6、此時,VPS伺服器系統負載是17,應該有點吃力了。
7、把類比的串連數提高到5000個,速度是4800頁面/分,速度開始慢下來了。
8、此時,VPS伺服器系統負載是23,伺服器負責過重了。
9、為了測試PHP 7在本VPS主機承受能力的極限,Webbench類比10000個串連數在20秒不斷訪問伺服器。
10、此時,VPS伺服器的系統負載近90,應該是到達極限了,但是伺服器依然沒有死機。
11、接下來,讓我們來看看同樣配置的VPS主機運行Wordpress的壓力測試結果,首先是用Webbench類比10秒內200、400個串連數,速度是3600頁面/分,相對於上面的PHP 7測試的速度慢了一半。
12、這是PHP 5.6測試200、400個串連數的系統負載,已經達到了10,明顯超出了在PHP 7環境上測試的3.49。
13、在PHP 5.6測試將類比串連數提高到1000、2000個,此時速度已經降到1600頁面/分,串連成功數也降低到了500左右,遠遠低於在PHP 7測試時的2700。
14、此時,系統負載達到了17了。
15、在PHP 5.6中用Webbench測試連接數為10000,在20秒內不斷訪問伺服器。此時,測試已經卡住,沒有結果。
16、這裡VPS伺服器的系統負載已經達到了1000以上,伺服器已經崩潰了。
17、PHP 5.6下的Wordpress網站已經宕機了。
五、PHP 7相容性問題
1、目前國內的Discuz等還不支援PHP 7,PHP擴充也就只有官方的Opcache可以使用,其它的如eAccelerator、xcache、memcached等,大家可以隨時關注擴充支援列表:https://github.com/gophp7/gophp7-ext/wiki/extensions-catalog。php的memcache擴充已經有了:https://github.com/php-memcached-dev/php-memcached/tree/php7 和https://github.com/websupport-sk/pecl-memcache。感謝快樂家園博主的提醒。
2、經過測試,PHP 7運行Wordpress沒有任何問題。
3、在PHP 7上安裝Wordpress外掛程式都沒有問題。
4、PHP 7還有部分函數、運算子等可能出現不相容問題,不過99%的程式可能不會用到這些。
六、PHP 7安裝使用體驗小結
1、使用PHP 7後有一個驚喜就是,確實如國外開發人員測試的那樣,PHP 7效能基本上與HHVM持平,由於HHVM藉助即時(Just In Time)編譯器將 PHP 代碼編譯至機器指令,所以不少的PHP程式運行在HHVM是需要改良的。
2、PHP 7具備了HHVM的超高效能,同時又有了PHP向後相容的優勢,相信在不久的未來PHP 7會得到越來越多人的認可和接受。雖然目前支援PHP 7的緩衝、加速等擴充還不多,但是這隻是時間問題,越來越多的開發人員會加入到PHP 7的開發行列中。
來自: http://www.phpxs.com/j/php7/1001234