HHVM安装使用教程-高效的PHP运行环境提升PHP性能9倍以上

VPS主机   2023年10月09日 12:35  

HHVM安装使用教程-高效的PHP运行环境提升PHP性能9倍以上

HHVM即HipHop Virtual Machine,目前是3.0版本,出自Facebook,它先将PHP和Hack程序编译为中间字节码,然后通过just-in-time (JIT)编译器将字节码动态翻译为x64机器代码,应用上了非常多的编译优化技术。

JIT就是HHVM高效率的所在,所谓字节码:是一种人类无法阅读的代码,专门用来给编译器高效执行的。当HHVM首次加载项目时,它会将所有的PHP代码转换成字节码;字节码的生成是与平台无关的。

机器码是一系列供CPU执行的指令。用过汇编的都应该清楚机器码,估计没人喜欢用汇编编程。通过编译器就可以把汇编转成机器码,然后供CPU处理。JIT(即时)编译器是指在运行时才会去编译字节码。字节码会存放在内存中,然后JIT编译器会根据需要加载并编译所涉的字节码。

通过以上技术,HipHop和HHVM获得了性能的提升。据官方介绍,与PHP 5.2引擎+APC相比,HHVM可以处理的Web请求吞吐量增加了9倍,而内存消耗减少了5倍。实际上HHVM之前有朋友留言提起过它,亲自测试过后发现HHVM在提升PHP处理速度上非常有优势,非常适合大型的网站。

最近,HHVM已经更新到了3.0版本,HHVM几乎已经完全支持PHP 5.5了,但还是有不少bug,所以不是所有应用程序都可以运行。因此,Facebook准备让最流行的20个开源PHP项目能够运行在HHVM上。第一个已经支持的项目就是Wordpress。不过对于国内的Discuz兼容还不太完美。

本篇文章来自 deamwork 博主,为大家分享一下HHVM+Nginx+FastCGI建站环境搭建过程,有兴趣的朋友可以一同来体验一下HHVM强悍性能。想要了解更多的有关于服务器优化的方法,这里有:

HHVM安装使用教程-高效的PHP运行环境提升PHP性能9倍以上

一、HHVM安装方法

1、HHVM官网:

  • 1、官方网站:https://www..com
  • 2、项目地址:https://github.com/facebook/hhvm

2、服务器操作系统:Debian7 x64 ,搭建LNMH架构,安装HHVM并采用Fastcgi与Nginx结合。现在我将开始介绍如何快速安装HHVM并采用Fastcgi与Nginx相结合,以方便添加虚拟主机。

3、我们这里选用的系统是debian,用debian有个好处添加完apt源以后可以快速安装HHVM。注意选择系统的时候一定要选择64位的系统不然无法安装。

4、首先我们要先进行一些安装前的步骤: sudo apt-get update

HHVM开始安装

5、接下来我们添加HHVM的apt源,并安装HHVM:


wget https://dl.hhvm.com/conf/hhvm.gpg.key
sudo apt-key add hhvm.gpg.key
echo "deb https://dl.hhvm.com/debian wheezy main">> /etc/apt/sources.list
sudo apt-get update
sudo apt-get install -y hhvm

6、如果是国内的主机请添加下面这个apt源,官方的apt源因为某些原因被Q了。


wget https://dl.hiphop-php.com/conf/hhvm.gpg.key
sudo apt-key add hhvm.gpg.key
echo "deb https://dl.hiphop-php.com/debian wheezy main">> /etc/apt/sources.list
sudo apt-get update
sudo apt-get install -y hhvm

HHVM开始编译

7、这个过程大概几分钟即可完成,会有Selecting Unpacking ,用时比较长

8、看到以下界面说明HHVM安装成功。

HHVM安装成功

二、安装Fastcgi方法

1、接着我们运行这条命令安装Fastcgi ,执行以下命令:


sudo /usr/share/hhvm/install_fastcgi.sh #安装Fastcgi
sudo update-rc.d hhvm defaults #添加到开机启动
sudo service hhvm restart #重启HHVM

HHVM安装Fastcgi

2、hhvm5接着我们查看一下端口开启没有:netstat –anp

HHVM查看端口

3、OK~当我们完成上面步骤的时候已经安装完成了HHVM并开启了Fastcgi模式。

三、安装Nginx搭建LNMH

1、接下来将介绍安装Nginx并与HHVM相结合搭建LNMH架构,并添加虚拟主机。

2、首先我们先安装好Nginx,我们这里选用的是LinuxEye博客推出的lnmp一键包。


wget https://blog.linuxeye.com/lnmp.tar.gz
#wget https://blog.linuxeye.com/lnmp-full.tar.gz # 包含源码(官方下载太慢)
tar xzf lnmp.tar.gz
cd lnmp
#如果需要修改目录(安装、数据存储、Nginx日志),请修改options.conf文件
./install.sh

3、我们只用安装Nginx和memcached即可,其他不用安装,Mysql数据库我们后面选择用apt安装。 (点击放大)

HHVM安装Nginx和memcached

4、当我们安装完成了Nginx后,备份lnmp目录下的vhost.sh文件,然后手动修改vhost.sh让nginx添加虚拟机时自带Fastcgi。找到下面这段:(大约在314行)


[ ! -d $web_install_dir/conf/vhost ] && mkdir $web_install_dir/conf/vhost
cat > $web_install_dir/conf/vhost/$domain.conf << EOF
server {
listen 80;
server_name $domain$moredomainame;
$N_log
index 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/vhost
cat > $web_install_dir/conf/vhost/$domain.conf << EOF
server {
listen 80;
server_name $domain$moredomainame;
$N_log
index 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、这样当我们添加虚拟主机时候就自动开启了Fastcgi。

HHVM修改代码

7、可能有人又会问了,为什么我用IP访问的时候无法直接访问IP目录下面的PHP文件和程序? 因为我们还没有修改默认的nginx.conf文件,接下来我们就要修改这个文件,让我们访问IP的时候可以直接访问PHP程序。

8、执行: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;
               }
......

HHVM修改配置文件

10、接下来我们重启Nginx看看效果如何: service nginx restart

11、如果出现当配置好后,打开探针出现502。请再安装一次hhvm并开启Fastcgi。

HHVM出现502错误

12、下面我们安装mysql数据库,很简单只要一条命令: apt-get install mysql-server,中间只要输入一次密码就可以了。

HHVM安装数据库

13、以下是测试探针地址,大家可以看看:https://174.140.168.169/tz.php

四、HHVM性能简单测试

1、测试HHVM能够承受的压力,可以采用网站服务器压力Web性能测试:Apache Bench,Webbench,http_load安装使用的方法,有兴趣的朋友可以多个方面进行测试。

2、这里只是简单地使用Webbench进行压力测试,先测试一下普通的LNMP所能够承受的压力,在10秒中内发送100个请求,VPS主机的负载压力达到了27。

HHVM压力测试

3、同时网站访问直接挂掉。

HHVM网站宕机

4、在同样配置上的VPS上测试HHVM性能,在10秒中内发送100个请求。

HHVM发送100个请求

5、VPS主机的负载压力在5以下。

HHVM较小的压力

6、继续向HHVM增加压力:20秒内发送100个请求。

HHVM增加请求数

7、VPS主机的负载压力在10左右。且网站可以正常访问。

HHVM压力保持平衡

五、HHVM安装与使用小结

1、HHVM安装过程并不复杂,难点在于如何将HHVM与Fastcgi、Nginx等融合,HHVM运行成功后,可以清楚地在探针中看到HHVM运行信息。

HHVM探针显示

2、再来看看HHVM在探针上的整数运算能力检测、浮点运算能力检测、数据I/O能力检测项目的测试,都是在0.00x级别。

HHVM运算能力

文章出自:Deamwork   由部落编辑整理,版权归原作者所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。

域名注册
购买VPS主机

您或许对下面这些文章有兴趣:                    本月吐槽辛苦排行榜

在这个部落村庄里,已经有87 位神马家族成员冒出泡来在农场开始干活了
  • 7024 3

    第一个?

    musk100 回复:

    @7024, 前排挤挤

    这是农场的第 1 块农田,部落批准 [7024] 在[2014-5-31 17:51]开垦完成.
  • 洛克 14

    哈哈哈

    这是农场的第 2 块农田,部落批准 [洛克] 在[2014-5-31 17:56]开垦完成.
  • kamin 3

    前排~~~~

    这是农场的第 3 块农田,部落批准 [kamin] 在[2014-5-31 17:59]开垦完成.
  • befory 5

    前排~~~~

    这是农场的第 4 块农田,部落批准 [befory] 在[2014-5-31 17:59]开垦完成.
  • wordpressnote 13

    终于等来了,少年们,赶快的吧,点击我头像,就是用hhvm

    Qa 回复:

    @wordpressnote, 一来就看到你啦

    wordpressnote 回复:

    @Qa, 哈哈,占用的位置很好

    qi 回复:

    @wordpressnote, 博主网站打不开了,怎么回事?

    wordpressnote 回复:

    @qi, 网址输入了,晕了,可以打开的

    wordpressnote 回复:

    @wordpressnote, 点现在这个,上面那个地址不对,www.wordpressnote.com

    ytf4425 回复:

    @wordpressnote, 我还以为你是来秀“页面打开错误”的呢

    这是农场的第 5 块农田,部落批准 [wordpressnote] 在[2014-5-31 18:01]开垦完成.
  • Qa 4

    前排!快使用HHVM吧。哈哈

    余人 回复:

    @Qa, 哈哈

    qa 回复:

    @余人, 嘿嘿

    这是农场的第 6 块农田,部落批准 [Qa] 在[2014-5-31 18:01]开垦完成.
  • kamin 3

    现在这个站点就是用hhvm搭建的

    qi 回复:

    @kamin, 是美国主机吗?响应很快。

    kamin 回复:

    @qi, 是美国的,hhvm+memcached+hk空间php静态文件加速

    wordpressnote 回复:

    @qi, hhvm+redis有问题

    潮流台 回复:

    @kamin, 无法访问啊!

    这是农场的第 7 块农田,部落批准 [kamin] 在[2014-5-31 18:01]开垦完成.
  • E享乐 5

    占位……

    这是农场的第 8 块农田,部落批准 [E享乐] 在[2014-5-31 18:07]开垦完成.
  • vgete 1

    最近好多网站打不开,看来*又提了不少

    qi 回复:

    @vgete, 现在好多网页刚开始打开是一片空白,然后才显示文字出来,是不是和这个有关系?

    vgete 回复:

    @qi, 应该是,你的网站也打不开,把DNS设置成8.8.8.8就可

    Qbq Music 回复:

    @vgete, 现在是非常时期不建议用谷歌的DNS,可以用114的DNS,114的DNS也还好比较干净,访问不存在的网站不会跳转到错误导航页,而且没有干扰,就是没有谷歌的DNS更新快,谷歌的DNS平时就隔三差五的被干扰,现在更是,解析时间很长,谷歌官网更是了,不挂袋里根本打不开!害得我搜东西只能用百度了!DNS建议首选114谷歌备用比较好!———————————————-至于网站打开慢或者空白,应该是因为用了谷歌统计,可以暂时换成其他统计,也可以保留,还可以删掉!!!

    johnhuo 回复:

    @qi, 登录wordpress后台有点慢啊,,是不是和这有关

    这是农场的第 9 块农田,部落批准 [vgete] 在[2014-5-31 18:11]开垦完成.
  • Jason 16

    你们好快!

    这是农场的第 10 块农田,部落批准 [Jason] 在[2014-5-31 18:28]开垦完成.
  • Less 3

    很霸气。优化后应该很快。
    话说现在想搞个类似于cdn的东西,就是手里有一台腾讯云,但是网站建在美国,如何利用腾讯云搭建cdn,每天自动更新网站的内容缓存,就是腾讯云上无法进入后台,只能相当于cdn一样访问。最好可以一键搭建什么的。。。

    Sang 回复:

    @Less, 腾讯云很渣。。

    wordpressnote 回复:

    @Sang, 有多渣?还想入手一枚呢

    Sang 回复:

    @wordpressnote, @Less, 腾讯云的国际带宽。。还有就是不建议微型。性能可能直接影响到一些操作的速度。

    Less 回复:

    @Sang, 为何这么说?

    kamin 回复:

    @Less, Layer CDN 静态文件加速。可以加速图片 JS之类的。

    Less 回复:

    @kamin, 有七牛了。。。就是希望整站加速而已。。。

    qi 回复:

    @Less, 可以用腾讯服务器搭建一个镜像,自动更新网站内容,但是由于没有BA的不能直接访问,因为可以使用腾讯 服务器做为CDN加速使用。

    这是农场的第 11 块农田,部落批准 [Less] 在[2014-5-31 18:50]开垦完成.
  • 大喇叭 16

    上面速度这么这么快的啊

    这是农场的第 12 块农田,部落批准 [大喇叭] 在[2014-5-31 19:05]开垦完成.
  • 大喇叭 16

    要是做成插件搞到AMH上面就是好了,求破..

    qi 回复:

    @大喇叭, 应该不能做插件,可以让AMH改良一下,把PHP替换成为HHVM。

    大喇叭 回复:

    @qi, 哦,不知道谁去折腾下,,,,搞个用下,应该相当的不错的…

    wordpressnote 回复:

    @大喇叭, 这个应该不难

    大喇叭 回复:

    @wordpressnote, 哈哈..求搞

    这是农场的第 13 块农田,部落批准 [大喇叭] 在[2014-5-31 19:07]开垦完成.
  • 锅岛霖懿 2

    抢不过楼上的~

    这是农场的第 14 块农田,部落批准 [锅岛霖懿] 在[2014-5-31 19:42]开垦完成.
  • 不认识 17

    这货是缓冲还是中间件?
    感觉和金蝶的中间件概念很像啊

    qi 回复:

    @不认识, 是一个执行PHP代码的虚拟机,应该不同。

    这是农场的第 15 块农田,部落批准 [不认识] 在[2014-5-31 19:45]开垦完成.
  • Kung 23

    出去吃饭了。。看似很叼的样子。。我去试试。。

    这是农场的第 16 块农田,部落批准 [Kung] 在[2014-5-31 20:39]开垦完成.
  • 潮流台 11

    :twisted: 很吊啊!不过懒得折腾,下次弄新的试试!

    qi 回复:

    @潮流台, 感觉以后搭建WP都使用HHVM了。

    潮流台 回复:

    @qi, :twisted: 能变快省资源当然好!

    这是农场的第 17 块农田,部落批准 [潮流台] 在[2014-5-31 23:21]开垦完成.
  • 逗妇乳 19

    不喜fastcgi

    这是农场的第 18 块农田,部落批准 [逗妇乳] 在[2014-5-31 23:35]开垦完成.
  • 高大上。以后再说吧

    这是农场的第 19 块农田,部落批准 [爱敷衍] 在[2014-5-31 23:46]开垦完成.
  • Sang 1

    其实我比较在意的是他如果能够平滑取代PHP那是比较有意义,但是如果只是支持部分程序,感觉还是不太适合。

    这是农场的第 20 块农田,部落批准 [Sang] 在[2014-6-1 00:39]开垦完成.
  • 泷涯 5

    博客*完了,顺便把wp换成typecho,速度快了好多

    这是农场的第 21 块农田,部落批准 [泷涯] 在[2014-6-1 09:38]开垦完成.
  • 改天试试!

    这是农场的第 22 块农田,部落批准 [悦听有声] 在[2014-6-1 15:35]开垦完成.
  • iWin8 5

    下午七牛被攻击了

    这是农场的第 23 块农田,部落批准 [iWin8] 在[2014-6-1 20:51]开垦完成.
  • 若水 16

    后排了。移动把我网站k了。现在用移动网,无法更新博客了。

    这是农场的第 24 块农田,部落批准 [若水] 在[2014-6-1 21:43]开垦完成.
  • johnhuo 3

    话说最近发的文章一篇也没有搞懂,,再不学习就真的跟不上了。。。
    还有最近qi回复我收不到邮件了

    这是农场的第 25 块农田,部落批准 [johnhuo] 在[2014-6-1 22:51]开垦完成.
  • 寒冰 7

    今天竟然木有更新,看来qi 姐 今天过节啊 哈哈

    这是农场的第 26 块农田,部落批准 [寒冰] 在[2014-6-1 23:54]开垦完成.
  • liouxunhuan

    希望qiqi老大可以出个阿里云上可以安装成功的教程
    阿里云是debian 6 是64位的 怎么也安装不成功
    把系统换成CentOS 和Ubuntu 64位的也安装不成功
    搞了半天 郁闷死了

    wordpressnote 回复:

    @liouxunhuan, 应该不至于吧,没有阿里云来测试

    这是农场的第 27 块农田,部落批准 [liouxunhuan] 在[2014-6-2 03:52]开垦完成.
  • qi 现在不怎么发表关于免费空间的 文章了 免费资源部落要转型了!!!

    这是农场的第 28 块农田,部落批准 [外星人源码论坛] 在[2014-6-2 15:30]开垦完成.
  • Terence 1

    运维笔记的lnmp是不是会杀%或者改%端口?装到一半%断开,”by foreign host”。。

    这是农场的第 29 块农田,部落批准 [Terence] 在[2014-6-2 16:35]开垦完成.
  • 家家 5

    其实真正影响网站打开速度的,归根结底不是php的运行速度,而是数据库的查询速度。。。。。只要用的还是mysql 或者mysqlserver,这个环境运行php代码再快,都跟apache 或者nginx无差。。。nginx也就是开静态页面,以及无需数据库的php时会很快,一上数据库,还不如apache稳定……

    qi 回复:

    @家家, 据说MariaDB在性能上有不少的提升。

    这是农场的第 30 块农田,部落批准 [家家] 在[2014-6-7 15:59]开垦完成.
  • 家家 5

    C++优秀、汇编挂科的路过。。。。。果断不是人能学习的语言啊……

    这是农场的第 31 块农田,部落批准 [家家] 在[2014-6-7 16:02]开垦完成.
  • 求个部落论坛的邀请码,邮箱scka@wanghailin.cn

    qi 回复:

    @SCKA, 你好,用这个:keskft

    SCKA 回复:

    @qi, 已经注册了,谢咯

    这是农场的第 32 块农田,部落批准 [SCKA] 在[2014-6-12 09:35]开垦完成.
  • Roder 4

    我安装的时候出错了,设置这个locale有什么用啊
    perl: warning: Setting locale failed.
    perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = “UTF-8”,
    LANG = (unset)
    are supported and installed on your system.
    perl: warning: Falling back to the standard locale (“C”).

    这是农场的第 33 块农田,部落批准 [Roder] 在[2014-6-28 18:39]开垦完成.
  • 李生

    安装wordpress
    安装插件提示ftp权限等问题,请问怎么解决。

    qi 回复:

    @李生, 那就修改一下文件夹权限。

    这是农场的第 34 块农田,部落批准 [李生] 在[2014-8-26 03:07]开垦完成.
  • 老牛博客 2

    太牛逼了
    ~~~
    有空整整

    这是农场的第 35 块农田,部落批准 [老牛博客] 在[2014-10-30 10:29]开垦完成.
  • 各种小白

    我想博主你忘记了一些东西。。。Linuxeye博主的lnmp一键包会自动清空防火*设置,默认只打开22,80,443的端口,如果之前换了端口的话。。。SS@H果断会坑

    qi 回复:

    @各种小白, 谢谢提醒。

    这是农场的第 36 块农田,部落批准 [各种小白] 在[2014-11-24 12:39]开垦完成.
  • 黑苹果乐园 3

    站长能不能研究一下如何在amh4.2上整合hhvm?

    qi 回复:

    @黑苹果乐园, 官方5.0的已经集成了,不过是收费的。免费版本的恐怕得修改源码了。

    这是农场的第 37 块农田,部落批准 [黑苹果乐园] 在[2014-12-23 19:35]开垦完成.
  • 队歌

    一键包好像已经集成hhvm了

    qi 回复:

    @队歌, 官方安装包有了?

    这是农场的第 38 块农田,部落批准 [队歌] 在[2015-5-23 18:39]开垦完成.
  • 好像如果一开始装了 如果一键包里选no会被删掉 选yes也会失败

    qi 回复:

    @队歌, 无法卸载干净了?

    这是农场的第 39 块农田,部落批准 [队歌] 在[2015-5-23 19:08]开垦完成.
  • Eden

    qi,如果用HHVM,应该用哪个版本的PHP更好

    qi 回复:

    @Eden, 先最新版本的PHP好一些,兼容性要强一些。

    这是农场的第 40 块农田,部落批准 [Eden] 在[2015-11-5 20:53]开垦完成.
  • KEVI 2

    HHVM有点内存泄漏哦

    qi 回复:

    @KEVI, 是的,确实有发现,经常502错误。

    这是农场的第 41 块农田,部落批准 [KEVI] 在[2015-12-9 12:54]开垦完成.
  • 观星者

    “20秒内发送100个请求。”

    图上的命令是 -c 20 -t 100,
    意思是100秒,20个连接。。。写反了吧。。。

    qi 回复:

    @观星者, 才发现,确实是错了。应该是当时测试的时候没有注意到。

    这是农场的第 42 块农田,部落批准 [观星者] 在[2015-12-10 05:18]开垦完成.
  • Sin

    感觉用好了PHP7就用不到这个了

    qi 回复:

    是呀,php7的性能提高很快。我现在都不用缓存插件。

    这是农场的第 43 块农田,部落批准 [Sin] 在[2016-9-21 05:09]开垦完成.
看贴要回贴有N种理由!看帖不回贴的后果你懂得的!


评论内容 (*必填):
(Ctrl + Enter提交)   

部落快速搜索栏

各类专题梳理

网站导航栏

X
返回顶部