您好,登錄后才能下訂單哦!
又到清明時(shí),雨紛紛,人觴觴.有空閑的時(shí)間來學(xué)習(xí)記錄點(diǎn)其他的東西.
簡介:
大家都知道FaceBook一直是開源界旗幟之一,FaceBook主頁業(yè)務(wù)
也是由PHP來開發(fā)完成,FaceBook的訪問量,業(yè)務(wù)能力在業(yè)界可謂
拔得頭籌,當(dāng)然單純的PHP基于半解釋半編譯的性能可能不對(duì)其胃口.
因此FaceBook自助研發(fā)了更高性能的PHP虛擬機(jī),旨在將PHP代碼
在運(yùn)行時(shí)轉(zhuǎn)換為更高效率的C++代碼(AOT 靜態(tài)鏈接編譯),至于程
序邏輯并不是我們關(guān)注的,我們要關(guān)注如何配置在不同環(huán)境發(fā)揮它
的最大性能. :)
有興趣的朋友 請(qǐng) hhvm.com, 項(xiàng)目始于2010年,項(xiàng)目性能毋庸置疑.
最新版本是 2.4 stable , 3.1 還在develop. github-hhvm
嘗試:
hhvm的安裝目前分為兩種方式:
源碼編譯:
過程比較繁瑣復(fù)雜,由于初試HHVM,不需要過多定制,暫不采用.
RPM安裝:
這一次先用RPM方式嘗鮮即可.官方已放出了RPM的安裝方式
# 將源配置文件下載到 /etc/yum.repos.d/ 下 wget http://www.hop5.in/yum/el6/hop5.repo # 移除 gnote 可能會(huì)后面軟件起沖突 rpm -e gnote # 確保機(jī)器上有httpd2.2+的版本 yum -y install httpd # 掛載 centos 發(fā)行光盤第二張,安裝如下包 rpm -ivh libc-client-2007e-11.el6.x86_64.rpm rpm -ivh oniguruma-5.9.1-3.1.el6.x86_64.rpm # 剩下應(yīng)該就能一路向下了 yum -y install hhvm
安裝完畢后我們可 rpm -ql hhvm 查詢安裝情況
# 這幾個(gè)是我們要關(guān)注的東東 /usr/lib64/hiphop-php/hphp /etc/profile.d/hphp.sh /usr/bin/hhvm
運(yùn)行:
hhvm 運(yùn)行有模式概念, run (默認(rèn)參數(shù)) | debug 交互調(diào)試 | server 前臺(tái)模式 | daemon 服務(wù) | replay | translate (t)
我們只關(guān)注 deamon , 將HHVM變?yōu)楹笈_(tái)服務(wù) , 來等待用戶響應(yīng) . 此概念與PHP-FPM如出一轍
當(dāng)然在你初次接觸之時(shí)還推薦你 server 模式,此模式不需要任何配置文件即可啟動(dòng),這對(duì)于首次
運(yùn)行它相當(dāng)重要.
server模式:
# server 模式啟動(dòng) hhvm -m server index.php
第一次接觸相當(dāng)順利,好感++有木有 : )
deamon模式:
hhvm的配置需要自己手寫完成,daemon服務(wù)的啟動(dòng)也需要依賴它來完成 請(qǐng) hhvm options
# 在這里我們完成了一個(gè)最簡單最基本的配置文件 vim /etc/hhvm.conf # 我們把沒必要都不弄上來 # pid 文件 PidFile = /var/run/hhvm.pid # 運(yùn)行日志文件 Log { Level = None #(default) | Error | Warning | Info | Verbose NoSilencer = false AlwaysLogUnhandledExceptions = true RuntimeErrorReportingLevel = 8191 Header = false InjectedStackTrace = true NativeStackTrace = true MaxMessagesPerRequest = -1 # 運(yùn)行日志 UseLogFile = true File = /var/run/hhvm.log # 訪問日志 Access { * { File = /var/run/hhvmaccess.log Format = %h %l %u %t "%r" %>s %b } } # 管理員管理日志 AdminLog { File = /var/run/hhvm.admin.log Format = %h %t %s %U } ApplicationLog = true } # 服務(wù)器選項(xiàng) Server { # 主機(jī)名 Host = www.king.com IP = 172.16.251.41 Port = 80 # 線程總數(shù) 并發(fā)數(shù)量 (重要) ThreadCount = 50 # 欲解釋的php項(xiàng)目目錄 ( 重要 ) SourceRoot = /var/www/php/ # 請(qǐng)求超時(shí)不限 請(qǐng)求內(nèi)存不限 RequestTimeoutSeconds = -1 RequestMemoryMaxBytes = -1 # 啟動(dòng)服務(wù)選項(xiàng) 默認(rèn)頁 錯(cuò)誤頁 錯(cuò)誤內(nèi)容 DefaultDocument = index.php ErrorDocument404 = 404.php FatalErrorMessage = sorry , error # http設(shè)置 壓縮 長連接 http協(xié)議棧大小 響應(yīng)隊(duì)列長度 GzipCompressionLevel = 3 EnableKeepAlive = true EnableEarlyFlush = true MaxPostSize = 8 # in MB ResponseQueueCount = 0 # 連接潮濕 ConnectionTimeoutSeconds = 60 } # 管理地址 AdminServer { Port = 8088 ThreadCount = 1 Password = }
# 測(cè)試頁面
管理頁面:
在此可以執(zhí)行多種hhvm的管理命令(對(duì)應(yīng)url即可)
測(cè)試:
初探階段我們使用最為簡單的ab測(cè)試完成,后面可以進(jìn)行更加精確的測(cè)試項(xiàng)目來完成
圖: 默認(rèn)情況未優(yōu)化任何參數(shù)的情況如下
# 機(jī)器情況 cpu 1.3ghz , memory 1G 虛擬機(jī)環(huán)境 # 測(cè)試頁面為 phpMyadmin 4 ab -c 100 -n 10000 http://172.16.251.41/
純腳本執(zhí)行環(huán)境壓力值一致情況 ( 該php頁面非常簡單只書寫了一個(gè) phpinfo() 探針函數(shù) )
思考:
純php或者內(nèi)容量少的情況下,響應(yīng)無比快,那大家或許猜到了瓶頸,看圖
上圖清晰明確指出了性能所在,這便是下節(jié)我們要解決的一些問題
注意這里都是無緩存的,并且每一次的請(qǐng)求都要重新生成
靜態(tài)文件緩存,php代碼緩存等等
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。