HHVM即HipHop Virtual Machine,目前是3.0版本,出自Facebook,它先將PHP和Hack程序編譯為中間字節(jié)碼,然后通過just-in-time (JIT)編譯器將字節(jié)碼動(dòng)態(tài)翻譯為x64機(jī)器代碼,應(yīng)用上了非常多的編譯優(yōu)化技術(shù)。
JIT就是HHVM高效率的所在,所謂字節(jié)碼:是一種人類無法閱讀的代碼,專門用來給編譯器高效執(zhí)行的。當(dāng)HHVM首次加載項(xiàng)目時(shí),它會(huì)將所有的PHP代碼轉(zhuǎn)換成字節(jié)碼;字節(jié)碼的生成是與平臺(tái)無關(guān)的。
機(jī)器碼是一系列供CPU執(zhí)行的指令。用過匯編的都應(yīng)該清楚機(jī)器碼,估計(jì)沒人喜歡用匯編編程。通過編譯器就可以把匯編轉(zhuǎn)成機(jī)器碼,然后供CPU處理。JIT(即時(shí))編譯器是指在運(yùn)行時(shí)才會(huì)去編譯字節(jié)碼。字節(jié)碼會(huì)存放在內(nèi)存中,然后JIT編譯器會(huì)根據(jù)需要加載并編譯所涉的字節(jié)碼。
通過以上技術(shù),HipHop和HHVM獲得了性能的提升。據(jù)官方介紹,與PHP 5.2引擎+APC相比,HHVM可以處理的Web請(qǐng)求吞吐量增加了9倍,而內(nèi)存消耗減少了5倍。實(shí)際上HHVM之前有朋友留言提起過它,親自測(cè)試過后發(fā)現(xiàn)HHVM在提升PHP處理速度上非常有優(yōu)勢(shì),非常適合大型的網(wǎng)站。
最近,HHVM已經(jīng)更新到了3.0版本,HHVM幾乎已經(jīng)完全支持PHP 5.5了,但還是有不少bug,所以不是所有應(yīng)用程序都可以運(yùn)行。因此,F(xiàn)acebook準(zhǔn)備讓最流行的20個(gè)開源PHP項(xiàng)目能夠運(yùn)行在HHVM上。第一個(gè)已經(jīng)支持的項(xiàng)目就是Wordpress。不過對(duì)于國內(nèi)的Discuz兼容還不太完美。
本篇文章來自 deamwork 博主,為大家分享一下HHVM+Nginx+FastCGI建站環(huán)境搭建過程,有興趣的朋友可以一同來體驗(yàn)一下HHVM強(qiáng)悍性能。想要了解更多的有關(guān)于服務(wù)器優(yōu)化的方法,這里有:
HHVM安裝使用教程-高效的PHP運(yùn)行環(huán)境提升PHP性能9倍以上
1、HHVM官網(wǎng):
2、服務(wù)器操作系統(tǒng):Debian7 x64 ,搭建LNMH架構(gòu),安裝HHVM并采用Fastcgi與Nginx結(jié)合。現(xiàn)在我將開始介紹如何快速安裝HHVM并采用Fastcgi與Nginx相結(jié)合,以方便添加虛擬主機(jī)。
3、我們這里選用的系統(tǒng)是debian,用debian有個(gè)好處添加完apt源以后可以快速安裝HHVM。注意選擇系統(tǒng)的時(shí)候一定要選擇64位的系統(tǒng)不然無法安裝。
4、首先我們要先進(jìn)行一些安裝前的步驟: sudo apt-get update
5、接下來我們添加HHVM的apt源,并安裝HHVM:
wget http://dl.hhvm.com/conf/hhvm.gpg.keysudo apt-key add hhvm.gpg.keyecho "deb http://dl.hhvm.com/debian wheezy main">> /etc/apt/sources.listsudo apt-get updatesudo apt-get install -y hhvm
6、如果是國內(nèi)的主機(jī)請(qǐng)?zhí)砑酉旅孢@個(gè)apt源,官方的apt源因?yàn)槟承┰虮籕了。
wget http://dl.hiphop-php.com/conf/hhvm.gpg.keysudo apt-key add hhvm.gpg.keyecho "deb http://dl.hiphop-php.com/debian wheezy main">> /etc/apt/sources.listsudo apt-get updatesudo apt-get install -y hhvm
7、這個(gè)過程大概幾分鐘即可完成,會(huì)有Selecting Unpacking ,用時(shí)比較長
8、看到以下界面說明HHVM安裝成功。
1、接著我們運(yùn)行這條命令安裝Fastcgi ,執(zhí)行以下命令:
sudo /usr/share/hhvm/install_fastcgi.sh #安裝Fastcgisudo update-rc.d hhvm defaults #添加到開機(jī)啟動(dòng)sudo service hhvm restart #重啟HHVM
2、hhvm5接著我們查看一下端口開啟沒有:netstat –anp
3、OK~當(dāng)我們完成上面步驟的時(shí)候已經(jīng)安裝完成了HHVM并開啟了Fastcgi模式。
1、接下來將介紹安裝Nginx并與HHVM相結(jié)合搭建LNMH架構(gòu),并添加虛擬主機(jī)。
2、首先我們先安裝好Nginx,我們這里選用的是LinuxEye博客推出的lnmp一鍵包。
wget http://blog.linuxeye.com/lnmp.tar.gz#wget http://blog.linuxeye.com/lnmp-full.tar.gz # 包含源碼(官方下載太慢)tar xzf lnmp.tar.gzcd lnmp#如果需要修改目錄(安裝、數(shù)據(jù)存儲(chǔ)、Nginx日志),請(qǐng)修改options.conf文件./install.sh
3、我們只用安裝Nginx和memcached即可,其他不用安裝,Mysql數(shù)據(jù)庫我們后面選擇用apt安裝。 (點(diǎn)擊放大)
4、當(dāng)我們安裝完成了Nginx后,備份lnmp目錄下的vhost.sh文件,然后手動(dòng)修改vhost.sh讓nginx添加虛擬機(jī)時(shí)自帶Fastcgi。找到下面這段:(大約在314行)
[ ! -d $web_install_dir/conf/vhost ] && mkdir $web_install_dir/conf/vhostcat > $web_install_dir/conf/vhost/$domain.conf << EOFserver {listen 80;server_name $domain$moredomainame;$N_logindex index.html index.htm index.jsp index.php;include $rewrite.conf;root $vhostdir;#error_page 404 /404.html;if ( \$query_string ~* ".*[\;'\<\>].*" ){ return 404; }$anti_hotlinking`echo -e $ngx_pagespeed`location ~ .*\.(php|php5)?$ { #fastcgi_pass remote_php_ip:9000; fastcgi_pass unix:/dev/shm/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; }......
5、把它修改成下面這樣:
[ ! -d $web_install_dir/conf/vhost ] && mkdir $web_install_dir/conf/vhostcat > $web_install_dir/conf/vhost/$domain.conf << EOFserver {listen 80;server_name $domain$moredomainame;$N_logindex index.html index.htm index.jsp index.php;include $rewrite.conf;root $vhostdir;#error_page 404 /404.html;if ( \$query_string ~* ".*[\;'\<\>].*" ){ return 404; }$anti_hotlinking`echo -e $ngx_pagespeed`location ~ .*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; #fastcgi_pass unix:/var/run/hhvm/hhvm.sock; fastcgi_index index.php; include fastcgi.conf; }......
6、這樣當(dāng)我們添加虛擬主機(jī)時(shí)候就自動(dòng)開啟了Fastcgi。
7、可能有人又會(huì)問了,為什么我用IP訪問的時(shí)候無法直接訪問IP目錄下面的PHP文件和程序? 因?yàn)槲覀冞€沒有修改默認(rèn)的nginx.conf文件,接下來我們就要修改這個(gè)文件,讓我們?cè)L問IP的時(shí)候可以直接訪問PHP程序。
8、執(zhí)行:vi /usr/local/nginx/conf/nginx.conf,我們找到下面這段:
###################pureftpd AND phpmyadmin############################...... location ~ .*\.(php|php5)?$ { #fastcgi_pass remote_php_ip:9000; fastcgi_pass unix:/dev/shm/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; }......
9、將它修改為下面這樣:
###################pureftpd AND phpmyadmin############################...... location ~ .*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; #fastcgi_pass unix:/dev/shm/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; }......
10、接下來我們重啟Nginx看看效果如何: service nginx restart
11、如果出現(xiàn)當(dāng)配置好后,打開探針出現(xiàn)502。請(qǐng)?jiān)侔惭b一次hhvm并開啟Fastcgi。
12、下面我們安裝mysql數(shù)據(jù)庫,很簡單只要一條命令: apt-get install mysql-server,中間只要輸入一次密碼就可以了。
13、以下是測(cè)試探針地址,大家可以看看:http://174.140.168.169/tz.php
1、測(cè)試HHVM能夠承受的壓力,可以采用網(wǎng)站服務(wù)器壓力Web性能測(cè)試:Apache Bench,Webbench,http_load安裝使用的方法,有興趣的朋友可以多個(gè)方面進(jìn)行測(cè)試。
2、這里只是簡單地使用Webbench進(jìn)行壓力測(cè)試,先測(cè)試一下普通的LNMP所能夠承受的壓力,在10秒中內(nèi)發(fā)送100個(gè)請(qǐng)求,VPS主機(jī)的負(fù)載壓力達(dá)到了27。
3、同時(shí)網(wǎng)站訪問直接掛掉。
4、在同樣配置上的VPS上測(cè)試HHVM性能,在10秒中內(nèi)發(fā)送100個(gè)請(qǐng)求。
5、VPS主機(jī)的負(fù)載壓力在5以下。
6、繼續(xù)向HHVM增加壓力:20秒內(nèi)發(fā)送100個(gè)請(qǐng)求。
7、VPS主機(jī)的負(fù)載壓力在10左右。且網(wǎng)站可以正常訪問。
1、HHVM安裝過程并不復(fù)雜,難點(diǎn)在于如何將HHVM與Fastcgi、Nginx等融合,HHVM運(yùn)行成功后,可以清楚地在探針中看到HHVM運(yùn)行信息。
2、再來看看HHVM在探針上的整數(shù)運(yùn)算能力檢測(cè)、浮點(diǎn)運(yùn)算能力檢測(cè)、數(shù)據(jù)I/O能力檢測(cè)項(xiàng)目的測(cè)試,都是在0.00x級(jí)別。
文章出自:Deamwork 由部落編輯整理,版權(quán)歸原作者所有。本站文章除注明出處外,皆為作者原創(chuàng)文章,可自由引用,但請(qǐng)注明來源。
聯(lián)系客服