伴隨著php 7的發布,這幾天關于php 7性能和兼容性成了大家討論的熱點話題,php 7表現出來的高性能讓不少人蠢蠢欲動,有些“嘗鮮”的朋友已經將php 7應用到了生產環境當中了。同時,lnmp等熱門應用程序也及時作了更新,紛紛開始支持php 7。
提到php性能問題,不得不說之前分享的hhvm,這是臉譜公司為提高php性能而開發出來的工具,使用了 just-in-time (jit) 編譯方式將 php 代碼轉換成某種字節碼。實際測試過程中,hhvm對于php的性能提高是一個質的飛躍,高效的php運行環境提升php性能9倍以上。
近些年來php廣為人詬病就是性能瓶頸方面的問題,不少的開發者紛紛棄php而逃,而hhvm的完美表現對于php發展是非常不利的。php 7 是 php 社區對 hhvm 的回應,php 7正式發布版在php性能方面很到了非常大的改善,實際測試發現在部分場合php 7性能超過了hhvm。
本篇文章就為大家帶來php 7安裝與使用體驗,想要急切體驗php 7性能的朋友,在正式升級php之前最好多做幾次程序兼容性測試,雖然官方說php 7向后兼容性有99%,但是為了保險起見我們應用到生產環境當中還是需要保持謹慎的態度。
php 7安裝使用體驗:性能大提升,兼容性強,擴展支持不夠,升級php要謹慎
一、發揮php 7高性能的幾個要點
php 7相對于之前的php版本來說可以說性能有了質的飛躍,但是所謂“好馬配好鞍,好車配風帆”,想要發揮php 7的性能優勢,還需要從以下幾個方面做準備:(此部分引自php7核心開發者, yaf, yar, yac等項目作者:laruence)。
1. 記得啟用zend opcache,啟用opcache非常簡單, 在php.ini配置文件中加入:
1
2
3
|
zend_extension=opcache.so opcache.enable=1 opcache.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個預留的大頁內存:
1
2
3
4
5
6
7
|
$ cat /proc/meminfo | grep huge anonhugepages: 106496 kb hugepages_total: 512 hugepages_free: 504 hugepages_rsvd: 27 hugepages_surp: 0 hugepagesize: 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信息。最后:
1
2
|
$ 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的開發行列中。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://www.freehao123.com/php-7/