PHP 7安裝使用體驗(yàn)之性能大提升,兼容性強(qiáng),擴(kuò)展支持不夠(升級(jí)PHP要謹(jǐn)慎)
伴隨著PHP 7的發(fā)布,這幾天關(guān)于PHP 7性能和兼容性成了大家討論的熱點(diǎn)話題,PHP 7表現(xiàn)出來的高性能讓不少人蠢蠢欲動(dòng),有些“嘗鮮”的朋友已經(jīng)將PHP 7應(yīng)用到了生產(chǎn)環(huán)境當(dāng)中了。同時(shí),LNMP等熱門應(yīng)用程序也及時(shí)作了更新,紛紛開始支持PHP 7。
提到PHP性能問題,不得不說之前分享的HHVM,這是臉譜公司為提高PHP性能而開發(fā)出來的工具,使用了 Just-In-Time (JIT) 編譯方式將 PHP 代碼轉(zhuǎn)換成某種字節(jié)碼。實(shí)際測(cè)試過程中,HHVM對(duì)于PHP的性能提高是一個(gè)質(zhì)的飛躍,高效的PHP運(yùn)行環(huán)境提升PHP性能9倍以上。
近些年來PHP廣為人詬病就是性能瓶頸方面的問題,不少的開發(fā)者紛紛棄PHP而逃,而HHVM的完美表現(xiàn)對(duì)于PHP發(fā)展是非常不利的。PHP 7 是 PHP 社區(qū)對(duì) HHVM 的回應(yīng),PHP 7正式發(fā)布版在PHP性能方面很到了非常大的改善,實(shí)際測(cè)試發(fā)現(xiàn)在部分場(chǎng)合PHP 7性能超過了HHVM。
本篇文章就為大家?guī)鞵HP 7安裝與使用體驗(yàn),想要急切體驗(yàn)PHP 7性能的朋友,在正式升級(jí)PHP之前最好多做幾次程序兼容性測(cè)試,雖然官方說PHP 7向后兼容性有99%,但是為了保險(xiǎn)起見我們應(yīng)用到生產(chǎn)環(huán)境當(dāng)中還是需要保持謹(jǐn)慎的態(tài)度。
PHP 7安裝使用體驗(yàn):性能大提升,兼容性強(qiáng),擴(kuò)展支持不夠,升級(jí)PHP要謹(jǐn)慎
一、發(fā)揮PHP 7高性能的幾個(gè)要點(diǎn)
PHP 7相對(duì)于之前的PHP版本來說可以說性能有了質(zhì)的飛躍,但是所謂“好馬配好鞍,好車配風(fēng)帆”,想要發(fā)揮PHP 7的性能優(yōu)勢(shì),還需要從以下幾個(gè)方面做準(zhǔn)備:(此部分引自PHP7核心開發(fā)者, Yaf, Yar, Yac等項(xiàng)目作者:Laruence)。
1. 記得啟用Zend Opcache,啟用Opcache非常簡(jiǎn)單, 在php.ini配置文件中加入:
zend_extension=opcache.so opcache.enable=1 opcache.enable_cli=1"
2. 使用新的編譯器, 推薦GCC 4.8以上, 因?yàn)橹挥蠫CC 4.8以上PHP 7才會(huì)開啟Global Register for opline and execute_data支持, 這個(gè)會(huì)帶來5%左右的性能提升。
3. 開啟HugePage有利于PHP 7更快, 首先在系統(tǒng)中開啟HugePages, 然后開啟Opcache的huge_code_pages,以CentOS 6.5為例, 通過命令:$sudo sysctl vm.nr_hugepages=512,分配512個(gè)預(yù)留的大頁內(nèi)存:
$ 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會(huì)把自身的text段, 以及內(nèi)存分配中的huge都采用大內(nèi)存頁來保存, 減少TLB miss, 從而提高性能.
4. 開啟Opcache File Cache(實(shí)驗(yàn)性), 通過開啟這個(gè), 可以讓Opcache把opcode緩存緩存到外部文件中, 對(duì)于一些腳本, 會(huì)有很明顯的性能提升。方法是在php.ini中加入:opcache.file_cache=/tmp。這樣PHP就會(huì)在/tmp目錄下Cache一些Opcode的二進(jìn)制導(dǎo)出文件, 可以跨PHP生命周期存在.
5. PGO。如果你的PHP是專門為一個(gè)項(xiàng)目服務(wù), 比如只是為你的Wordpress, 或者drupal, 或者其他什么, 那么你就可以嘗試通過PGO, 來提升PHP, 專門為你的這個(gè)項(xiàng)目提高性能。具體的, 以wordpress 4.1為優(yōu)化場(chǎng)景.. 首先在編譯PHP的時(shí)候首先:$ make prof-gen。
6、然后用你的項(xiàng)目訓(xùn)練PHP, 比如對(duì)于Wordpress:$ sapi/cgi/php-cgi -T 100 /home/huixinchen/local/www/htdocs/wordpress/index.php >/dev/null,也就是讓php-cgi跑100遍wordpress的首頁, 從而生成一些在這個(gè)過程中的profile信息。最后:
$ make prof-clean $ make prof-use && make install
7、這個(gè)時(shí)候你編譯得到的PHP7就是為你的項(xiàng)目量身打造的最高性能的編譯版本。
二、PHP 7安裝與編譯
1、PHP 7官網(wǎng):
1、官網(wǎng):http://php.net/
2、下載:http://php.net/downloads.php或者本站下載地址:點(diǎn)擊下載
2、動(dòng)手能力強(qiáng)的朋友,可以自己直接到官方下載PHP 7,然后手動(dòng)編輯安裝。如果你已經(jīng)習(xí)慣使用lnmp.org站長(zhǎng)的LNMP一鍵安裝包,可以試試發(fā)布LNMP 1.3測(cè)試版,已經(jīng)增加了增加php7支持:網(wǎng)站平滑遷移到LNMP或LAMP建站環(huán)境的方法 。
3、OneinStack提供的LNMP安裝包已經(jīng)有了PHP 7一鍵安裝了,在執(zhí)行腳本的時(shí)候,可以選擇PHP 7安裝,PHP 7目前只有官方自帶的Zend Opcache擴(kuò)展可供安裝。
4、OneinStack安裝PHP 7安裝成功。
5、這是PHP 7信息顯示。
6、這是OneinStack提供的PHP 7的Opcache控制面板。
三、PHP 7與老版本PHP、HHVM性能對(duì)比
1、這是國(guó)外開發(fā)者測(cè)試的PHP 7與PHP 5.6在Wordpress、Drupal等熱門程序下表現(xiàn)的性能,結(jié)果很明顯PHP 7性能提升很多。
2、PHP 7對(duì)于Wordpress等程序來說,不僅僅提升單個(gè)執(zhí)行速度,隨著Wordpress運(yùn)行在PHP 7的時(shí)間越久,性能提升就更多。
3、上文也說到PHP 7對(duì)于PHP的性能提升在某些方面已經(jīng)超過了HHVM,這是國(guó)外zend.com官網(wǎng)給出的PHP 5.6、PHP 7、HHVM在不同的程序下執(zhí)行效率對(duì)比結(jié)果。
4、在專業(yè)開源的電子商務(wù)系統(tǒng)Magento上測(cè)試PHP 5.6、PHP 7、HHVM的執(zhí)行效率,PHP 7是PHP 5.6運(yùn)行速度的兩倍,而內(nèi)存占用還比PHP 5.6低30%。
5、Drupal 8上測(cè)試PHP 7的效率是最快的,已經(jīng)超過了HHVM。
6、Wordpress測(cè)試時(shí)發(fā)現(xiàn),PHP 5.6執(zhí)行需要占用100MB內(nèi)存,而PHP 7只要25MB。
7、在不同的程序執(zhí)行速度上,PHP 7顯然已經(jīng)領(lǐng)跑,Ruby 2.1、Python 2.7.8、Perl 5.18.4都不及PHP 7。
四、PHP 7性能測(cè)試結(jié)果報(bào)告
1、空說無憑,PHP 7運(yùn)行程序的性能到底如何呢?這里部落以一個(gè)全新的Wordpress為測(cè)試對(duì)象,運(yùn)行在PHP 7上Wordpress首頁加載時(shí)間測(cè)試顯示0.029秒,內(nèi)存是3.39MB。
2、這是同樣的Wordpress頁面運(yùn)行PHP 5.6上的頁面加載時(shí)間:1.955秒,內(nèi)存占用了3.92MB。從數(shù)據(jù)上看,PHP 7已經(jīng)完勝了PHP 5.6了。
3、PHP 7運(yùn)行Wordpress的效率相對(duì)于之前的版本確實(shí)有了質(zhì)的提升,為了全面了解PHP 7的性能,這里按照網(wǎng)站服務(wù)器壓力Web性能測(cè)試的方法,用Webbench模擬10秒內(nèi)200、400個(gè)連接數(shù),速度都是8000頁面/分以上。
4、此時(shí),VPS服務(wù)器系統(tǒng)負(fù)載是3.49。
5、把模擬的連接數(shù)提高到1600個(gè),速度依然保持在8000頁面/分以上。
6、此時(shí),VPS服務(wù)器系統(tǒng)負(fù)載是17,應(yīng)該有點(diǎn)吃力了。
7、把模擬的連接數(shù)提高到5000個(gè),速度是4800頁面/分,速度開始慢下來了。
8、此時(shí),VPS服務(wù)器系統(tǒng)負(fù)載是23,服務(wù)器負(fù)責(zé)過重了。
9、為了測(cè)試PHP 7在本VPS主機(jī)承受能力的極限,Webbench模擬10000個(gè)連接數(shù)在20秒不斷訪問服務(wù)器。
10、此時(shí),VPS服務(wù)器的系統(tǒng)負(fù)載近90,應(yīng)該是到達(dá)極限了,但是服務(wù)器依然沒有死機(jī)。
11、接下來,讓我們來看看同樣配置的VPS主機(jī)運(yùn)行Wordpress的壓力測(cè)試結(jié)果,首先是用Webbench模擬10秒內(nèi)200、400個(gè)連接數(shù),速度是3600頁面/分,相對(duì)于上面的PHP 7測(cè)試的速度慢了一半。
12、這是PHP 5.6測(cè)試200、400個(gè)連接數(shù)的系統(tǒng)負(fù)載,已經(jīng)達(dá)到了10,明顯超出了在PHP 7環(huán)境上測(cè)試的3.49。
13、在PHP 5.6測(cè)試將模擬連接數(shù)提高到1000、2000個(gè),此時(shí)速度已經(jīng)降到1600頁面/分,連接成功數(shù)也降低到了500左右,遠(yuǎn)遠(yuǎn)低于在PHP 7測(cè)試時(shí)的2700。
14、此時(shí),系統(tǒng)負(fù)載達(dá)到了17了。
15、在PHP 5.6中用Webbench測(cè)試連接數(shù)為10000,在20秒內(nèi)不斷訪問服務(wù)器。此時(shí),測(cè)試已經(jīng)卡住,沒有結(jié)果。
16、這里VPS服務(wù)器的系統(tǒng)負(fù)載已經(jīng)達(dá)到了1000以上,服務(wù)器已經(jīng)崩潰了。
17、PHP 5.6下的Wordpress網(wǎng)站已經(jīng)宕機(jī)了。
五、PHP 7兼容性問題
1、目前國(guó)內(nèi)的Discuz等還不支持PHP 7,PHP擴(kuò)展也就只有官方的Opcache可以使用,其它的如eAccelerator、xcache、memcached等,大家可以隨時(shí)關(guān)注擴(kuò)展支持列表:https://github.com/gophp7/gophp7-ext/wiki/extensions-catalog。php的memcache擴(kuò)展已經(jīng)有了:https://github.com/php-memcached-dev/php-memcached/tree/php7 和https://github.com/websupport-sk/pecl-memcache。感謝快樂家園博主的提醒。
2、經(jīng)過測(cè)試,PHP 7運(yùn)行Wordpress沒有任何問題。
3、在PHP 7上安裝Wordpress插件都沒有問題。
4、PHP 7還有部分函數(shù)、運(yùn)算符等可能出現(xiàn)不兼容問題,不過99%的程序可能不會(huì)用到這些。
六、PHP 7安裝使用體驗(yàn)小結(jié)
1、使用PHP 7后有一個(gè)驚喜就是,確實(shí)如國(guó)外開發(fā)者測(cè)試的那樣,PHP 7性能基本上與HHVM持平,由于HHVM借助實(shí)時(shí)(Just In Time)編譯器將 PHP 代碼編譯至機(jī)器指令,所以不少的PHP程序運(yùn)行在HHVM是需要改良的。
2、PHP 7具備了HHVM的超高性能,同時(shí)又有了PHP向后兼容的優(yōu)勢(shì),相信在不久的未來PHP 7會(huì)得到越來越多人的認(rèn)可和接受。雖然目前支持PHP 7的緩存、加速等擴(kuò)展還不多,但是這只是時(shí)間問題,越來越多的開發(fā)者會(huì)加入到PHP 7的開發(fā)行列中。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
thinkPHP下的widget擴(kuò)展用法實(shí)例分析
這篇文章主要介紹了thinkPHP下的widget擴(kuò)展用法,結(jié)合實(shí)例形式分析widget擴(kuò)展的具體使用技巧與注意事項(xiàng),需要的朋友可以參考下2015-12-12使用PHP如何實(shí)現(xiàn)高效安全的ftp服務(wù)器(二)
這篇文章主要介紹了使用PHP如何實(shí)現(xiàn)高效安全的ftp服務(wù)器(二)的相關(guān)資料,需要的朋友可以參考下2015-12-12Thinkphp 框架擴(kuò)展之類庫擴(kuò)展操作詳解
這篇文章主要介紹了Thinkphp 框架擴(kuò)展之類庫擴(kuò)展操作,結(jié)合實(shí)例形式分析了Thinkphp 類庫擴(kuò)展的相關(guān)原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2020-04-04CI框架數(shù)據(jù)庫查詢緩存優(yōu)化的方法
這篇文章主要介紹了CI框架數(shù)據(jù)庫查詢緩存優(yōu)化的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了CI框架中緩存的開啟、關(guān)閉、使用、清空等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2016-11-11解決PHPstudy Apache無法啟動(dòng)的問題【親測(cè)有效】
這篇文章主要介紹了PHPstudy Apache無法啟動(dòng)的問題及解決方法【親測(cè)有效】,本文給大家總結(jié)了三種方法供大家參考,需要的朋友可以參考下2020-10-10PHP給文字內(nèi)容中的關(guān)鍵字進(jìn)行套紅處理
本文介紹了一個(gè)PHP中的函數(shù),可以對(duì)內(nèi)容的關(guān)鍵字進(jìn)行套紅,高亮突出顯示關(guān)鍵字,分享給大家,希望對(duì)大家有所幫助。2016-04-04