行(xíng)業(yè)動态
PHP 7安裝使用(yòng)體(tǐ)驗:性能(nén↕¥¶✔g)大(dà)提升、擴展支持不(bù)夠、升級需謹慎

伴随著(zhe)PHP 7的(de)發布,這(zhè)幾天關于PHP £✘&Ω7性能(néng)和(hé)兼容性成了(l©¥¶€e)大(dà)家(jiā)討(tǎo)論的(de)熱(rè)點話(↓γhuà)題,PHP 7表現(xiàn)出來(lái)的∑♥•₹(de)高(gāo)性能(néng)讓不(bù)少(shǎo)人(rén)"¶蠢蠢欲動,有(yǒu)些(xiē)“嘗鮮”γΩ>→的(de)朋(péng)友(yǒu)已經将PHP 7應用(yòng)到(dà≠≥≠o)了(le)生(shēng)産環境當中了(le)。同時(shí),L↔∑σNMP等熱(rè)門(mén)應用(yòng)程序也≥<≠(yě)及時(shí)作(zuò)了(le)更新,紛紛開(kāi>>)始支持PHP 7。

提到(dào)PHP性能(néng)問(wèn)題,不(bù)得(de)不(b↑₩'™ù)說(shuō)之前分(fēn)享的(de)HHVM,這(zhè)是(ε™© shì)臉譜公司為(wèi)提高(gāo)PHP性能₽"δ(néng)而開(kāi)發出來(lái)的∏$(de)工(gōng)具,使用(yòng)了(le) Just-In-Ti£<×me (JIT) 編譯方式将 PHP 代碼轉換成某種字節碼。實際測試↔±過程中,HHVM對(duì)于PHP的(de)性能(néng)提高(gāoπ​→<)是(shì)一(yī)個(gè)質的(de)飛(fēi)躍,高(gāo)效的÷£(de)PHP運行(xíng)環境提升PHP性能(néng)9倍以上(shàn✘×β®g)。

近(jìn)些(xiē)年(nián)來(lái)PHP廣為(wèi)人(ré₽✘♣n)诟病就(jiù)是(shì)性能(néng)瓶頸方面的(de)問(w÷®≈èn)題,不(bù)少(shǎo)的(de)開(k↑₽εāi)發者紛紛棄PHP而逃,而HHVM的(de​₩±)完美(měi)表現(xiàn)對(du₩©↔↓ì)于PHP發展是(shì)非常不(bù)利的(de)。PHP 7 是(s∑&♠hì) PHP 社區(qū)對(duì) HHVM 的(de)回€γ±​應,PHP 7正式發布版在PHP性能(néng)方面很(hě✘¥λ≤n)到(dào)了(le)非常大(dà)的(de)改善,實際ασ♣ 測試發現(xiàn)在部分(fēn)場(chǎng)合PHP  €↕7性能(néng)超過了(le)HHVM。 $

本篇文(wén)章(zhāng)就(jiù)為(☆Ωwèi)大(dà)家(jiā)帶來(lái)PHP 7安裝與使用(yòng∑↑)體(tǐ)驗,想要(yào)急切體(tǐ)驗PHP 7↕€性能(néng)的(de)朋(péng)友(yǒu),在正式升級PHP之前最£≈'​好(hǎo)多(duō)做(zuò)幾次程序兼容性測試,₩♣σ☆雖然官方說(shuō)PHP 7向後兼容性有(yǒu)×δ$ 99%,但(dàn)是(shì)為(wèi)了(l ♠€∏e)保險起見(jiàn)我們應用(yòng)到(dào)生(shēng)産環境✘₩♠當中還(hái)是(shì)需要(yào)≥​保持謹慎的(de)态度。

PHP 7安裝使用(yòng)體(tǐ)驗:性能(néng)大(dφσ←πà)提升、兼容性強、擴展支持不(bù)夠、升級需謹慎

一(yī)、發揮PHP 7高(gāo)性能(néng​≈&÷)的(de)幾個(gè)要(yào)點

PHP 7相(xiàng)對(duì)于之前的(de)PHP版本來$ <♦(lái)說(shuō)可(kě)以說(sh÷ε≥∏uō)性能(néng)有(yǒu)了(le)質的(de♠€)飛(fēi)躍,但(dàn)是(shì)所謂“好(hǎo)馬配好↓≤(hǎo)鞍,好(hǎo)車(chē)配風(fēng☆≠↑÷)帆”,想要(yào)發揮PHP 7的(d<"©♣e)性能(néng)優勢,還(hái)需δ§δ>要(yào)從(cóng)以下(xià)幾個(gè)方面做(δαzuò)準備:(此部分(fēn)引自(zì)PHP‌<7核心開(kāi)發者, Yaf, Yar, Yac等項₩∏∑目作(zuò)者:Laruence)。


1. 記得(de)啓用(yòng)Zend Opcac∑♥✘σhe,啓用(yòng)Opcache非常簡單, 在php.in✘ ♠i配置文(wén)件(jiàn)中加入:

zend_extension=opcache.soopcache.∑₹‍enable=1opcache.enable_cli=1"

2. 使用(yòng)新的(de)編譯器(qì), 推薦GCCε₹ε 4.8以上(shàng), 因為(wèi)隻有(yǒu)GCCΩ ← 4.8以上(shàng)PHP 7才會≠±≠(huì)開(kāi)啓Global Register for oplin'₽λe and execute_data支持, 這(z÷♣₩≤hè)個(gè)會(huì)帶來(lái)5%左右的(de)性能(né₹β×"ng)提升。


3. 開(kāi)啓HugePage有(yǒu)利于PHP 7更☆±♥•快(kuài), 首先在系統中開(kāi)啓HugePages, 然後開(k<↑♥āi)啓Opcache的(de)huge_code_pageδ≈☆s,以CentOS 6.5為(wèi)例, 通(tōng)過命令:$s≠♣≠∞udo sysctl vm.nr_hugepages=512,分(σ♥fēn)配512個(gè)預留的(de)大(dà)≥÷≠¶頁內(nèi)存:

$ cat /proc/me±∞÷↑minfo  | grep Huge  ‍AnonHugePages:  &nb>ε​sp; 106496 kBHugePages_Total:γ♥®     512Hug€δePages_Free:   &n☆'>∑bsp;  504Hug∏§✔"ePages_Rsvd:  &nb¥∑sp;    27€₹HugePages_Surp:   ♠≠→     0δ•Ω₩Hugepagesize:    πφ;   2048 kB

然後在php.ini中加入:opcache.huge_code_pages=1 ↓§,這(zhè)樣一(yī)來(lái), PHP會(huì)把自(✘✘ ∏zì)身(shēn)的(de)text段, 以及內₩→∞(nèi)存分(fēn)配中的(de)huge都(dōu)采用(yò" "±ng)大(dà)內(nèi)存頁來(lái)保存, 減少(α₩↑shǎo)TLB miss, 從(cóng)而提高(gāo)性能(n"♣∑≠éng).

4. 開(kāi)啓Opcache File Cache(實驗'↔性), 通(tōng)過開(kāi)啓這(zhè∑>)個(gè), 可(kě)以讓Opcache把opcode緩存緩♦∏¥存到(dào)外(wài)部文(wén)件(jiàn)中, 對(duìΩ')于一(yī)些(xiē)腳本, 會(huì)↑∏∑☆有(yǒu)很(hěn)明(míng)顯的(de)性能(néng)提γ<®¶升。方法是(shì)在php.ini中加入:opcache.file_c<πache=/tmp。這(zhè)樣PHP就(jiù)會(huì)在≥÷'α/tmp目錄下(xià)Cache一(y&σ>ī)些(xiē)Opcode的(de)二進制(zhì)導出>Ω文(wén)件(jiàn), 可(kě)以跨PHP生(shē♦λσφng)命周期存在.

5. PGO。如(rú)果你(nǐ)的(¥βde)PHP是(shì)專門(mén)為(wèi)一(yī÷✘)個(gè)項目服務, 比如(rú)隻是(shì)為(wèi)你(nǐ♥λ)的(de)Wordpress, 或者drupal, 或者其他(tα₹♦×ā)什(shén)麽, 那(nà)麽你(nǐ)就(jiù)可(kě∏γ✔​)以嘗試通(tōng)過PGO, 來(lái)提升PHP, 專門(mén¶←‍φ)為(wèi)你(nǐ)的(de)這(zhè)個(gè)♣∑項目提高(gāo)性能(néng)。具體(tǐ)的(de), 以wor®£ dpress 4.1為(wèi)優化(h®"uà)場(chǎng)景.. 首先在編譯PHP的(de)時(shí)候首先€₩✔:$ make prof-gen。

6、然後用(yòng)你(nǐ)的(de)項目訓練PHP,¥™Ω≥ 比如(rú)對(duì)于Wordpress:$©✔ sapi/cgi/php-cgi -T 100 /home/huixiΩ→♠δnchen/local/www/htdocs/wordpress/in©•€‍dex.php >/dev/null,也(yě)就(jiù↔π)是(shì)讓php-cgi跑100遍wordpress<ε≈‌的(de)首頁, 從(cóng)而生(shēng)λφ©'成一(yī)些(xiē)在這(zhè)個(g≤'è)過程中的(de)profile信息。₽ €最後:

$ make prof-α≈clean$ make prof≠ ¥©-use && mak"∏e install

7、這(zhè)個(gè)時(shí)候你(nǐ)編≈∞'譯得(de)到(dào)的(de)PHP7就(jiù)是(shì)為(w↓βèi)你(nǐ)的(de)項目量身(shēn)打造的(de)最高(g↓ āo)性能(néng)的(de)編譯版本。


分(fēn)享至: