Hiphop是Facebook开发一款PHP二进制化的一个工具,最开始是由php转为C++,但是后来发现编译为c++的话,许多的时间会花费在编译代码上面,调试不方便,对于代码来说也不是即见即所得。

所以hiphop经历了这么几个阶段:

HPHPC=>HPHPI=>HHVM

HPHPC是静态编译,也就是把php转为c++

HPHPI是一个过渡产品,类似php zend虚拟机,性能还不如zend虚拟机,但是可以运行查看效果;

HHVM是在HPHPI基础上,应用了JIT技术,性能已经接近了HPHPC,目前facebook打算慢慢抛弃HPHPC;

性能上HPHPC和HHVM比zend虚拟机+加速器要节约cpu在50%在300%间(官方提供),我实际应用中,一般节约CPU在100%-300%间左右,流量越大越明显。

以上内容摘自http://saiyaren.iteye.com/blog/1888973

最近对这东西做了一些部署测试,确实发现很好,基本降低CPU占用50%以上是没有任何问题的。而且这东西已经在国内某大型电商网站线上使用了1年多了,相关开源爱好者也贡献了一些bug修复补丁和模块扩展。

目前国内外对这一神器的研究都比较少,主要的问题我分析了下有3个

1.官方不够活跃,包括目前的版本还有一些bug,比如在HHVM1.0下的libevent内存泄露,到了HHVM2.1上还未得到解决。

2.目前对PHP第三方模块的支持较少,比如对MongoDB的扩展,对于Redis模块只提供了最基本的功能函数,高级的东西还是需要在php代码层去实现。

3.社区不够活跃,这也是最主要的一个问题

在这里我把最近对这东西的一些简单的研究分享一下,对这玩意儿有兴趣的童鞋可以加群讨论:

HHVM学习研究 群号:271240899

目前最新的官方2.1版本还存在着内存泄露的问题,对redis的支持只是提供了最基本的功能(我们需要使用redis,所以对这一块比较在意,其它的扩展可以去查看官方支持列表:https://github.com/facebook/hiphop-php/tree/master/hphp/runtime/ext)

源码安装过于麻烦,想尝鲜的建议yum,官方的源码安装文档:https://github.com/facebook/hiphop-php/wiki/Building-and-installing-HHVM-on-CentOS-6.3

参照官方的安装方式,用官方提供的yum源进行安装,在http://saiyaren.iteye.com/博主的支持下修复了libevent的内存泄露问题

Step1:设置好yum源

rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

wget -O /etc/yum.repos.d/hop5.repo http://www.hop5.in/yum/el6/hop5.repo

yum clean all

Step2:安装好基础环境包。。。比较多。。。

rpm -ivh ftp://rpmfind.net/linux/epel/beta/6/x86_64/libmcrypt-2.5.8-9.el6.x86_64.rpm

rpm -ivh ftp://rpmfind.net/linux/epel/beta/6/x86_64/libmcrypt-devel-2.5.8-9.el6.x86_64.rpm

yum install git svn cpp make autoconf automake libtool patch memcached gcc-c++ cmake wget boost-devel mysql-devel pcre-devel gd-devel libxml2-devel expat-devel libicu-devel bzip2-devel oniguruma-devel openldap-devel readline-devel libc-client-devel libcap-devel binutils-devel pam-devel elfutils-libelf-devel tbb-devel libdwarf-devel dbus-cxx-devel libunwind-devel php-mssql libtool

如果准备编译安装的话,装以下的包就能够搭建好编译环境,如果不像编译安装则略过

yum install -y boost.x86_64 \

boost-chrono.x86_64 \

boost-date-time.x86_64 \

boost-devel.x86_64 \

boost-filesystem.x86_64 \

boost-graph.x86_64 \

boost-graph-mpich2.x86_64 \

boost-graph-openmpi.x86_64 \

boost-iostreams.x86_64 \

boost-jam.x86_64 \

boost-locale.x86_64 \

boost-math.x86_64 \

boost-mpich2.x86_64 \

boost-mpich2-devel.x86_64 \

boost-mpich2-python.x86_64 \

boost-openmpi.x86_64 \

boost-openmpi-devel.x86_64 \

boost-openmpi-python.x86_64 \

boost-program-options.x86_64 \

boost-python.x86_64 \

boost-random.x86_64 \

boost-regex.x86_64 \

boost-serialization.x86_64 \

boost-signals.x86_64 \

boost-static.x86_64 \

boost-system.x86_64 \

boost-test.x86_64 \

boost-thread.x86_64 \

boost-timer.x86_64 \

boost-wave.x86_64 \

cpp.x86_64 \

curl.x86_64 \

gcc.x86_64 \

gcc-c++.x86_64 \

gcc-gfortran.x86_64 \

gcc-objc.x86_64 \

gcc-objc++.x86_64 \

gcc-plugin-devel.x86_64 \

glog.x86_64 \

glog-devel.x86_64 \

gmp.x86_64 \

gmp-devel.x86_64 \

gmp-static.x86_64 \

golang.x86_64 \

libcurl.x86_64 \

libcurl-devel.x86_64 \

libdwarf.x86_64 \

libdwarf-devel.x86_64 \

libdwarf-static.x86_64 \

libdwarf-tools.x86_64 \

libevent.x86_64 \

libevent-devel.x86_64 \

libgcc.x86_64 \

libgfortran.x86_64 \

libgfortran-static.x86_64 \

libgomp.x86_64 \

libmemcached.x86_64 \

libmemcached-devel.x86_64 \

libmpc.x86_64 \

libmpc-devel.x86_64 \

libmudflap.x86_64 \

libmudflap-devel.x86_64 \

libmudflap-static.x86_64 \

libobjc.x86_64 \

libquadmath.x86_64 \

libquadmath-devel.x86_64 \

libquadmath-static.x86_64 \

libstdc++.x86_64 \

libstdc++-devel.x86_64 \

libstdc++-static.x86_64 \

libtool.x86_64 \

libtool-ltdl.x86_64 \

libtool-ltdl-devel.x86_64 \

lxc.x86_64 \

lxc-devel.x86_64 \

lxc-doc.x86_64 \

lxc-libs.x86_64 \

lxc-templates.x86_64 \

mpfr.x86_64 \

mpfr-devel.x86_64 \

nginx.x86_64 \

tbb.x86_64 \

tbb-devel.x86_64 \

tbb-doc.x86_64 \

如果这里安装 golang 包报错可以选择不安装这个包

如果不是编译安装,只要执行

yum install hiphop-php

Step3:解决HHVM对于libevent的内存泄露问题

git下libevent和hhvm的源码包,之所以要hhvm的源码包,是要在libevent源码中打入hhvm提供的针对libevent的补丁,才能让libevent支持hhvm

git clone git://github.com/libevent/libevent.git

git clone git://github.com/facebook/hiphop-php.git

cd libevent/

git checkout release-1.4.14b-stable

打补丁

cat ../hiphop-php/hphp/third_party/libevent-1.4.14.fb-changes.diff | patch -p1

打完补丁后改修一下libevent的http.c文件,解决内存泄露的关键

大概在2319行这里,在

if (req->evcon->state == EVCON_DISCONNECTED) {

下面,增加

req->userdone = 1;

Step4.编译安装libevent

./autogen.sh

./configure --prefix=/usr/ --libdir=/usr/lib64/  #注意路径不要出错,这里是覆盖了rpm安装的libevent

make && make install

ok...安装完毕

至此,

运行php脚本直接执行hhvm script.php就行了

hhvm会把php先编译成c++的代码再去运行

也可以使用hhvm以虚拟机的方式运行,这时候就相当于tomcat一样,配置文件可以指定监听一个端口,还有php网页文件存放的位置,会对指定位置下的php进行实时的编译,然后用nginx反向代理到这个端口就行了

运行方式:

hhvm -m daemon -c /etc/hhvm.hdf

关于hhvm.hdf配置文件可以参照官方文档的说明:

https://github.com/facebook/hiphop-php/wiki/Runtime-options

第三方扩展:

https://github.com/facebook/hiphop-php/wiki/HHVM-other-extension-share

转载于:https://blog.51cto.com/lustlost/1285597

PHP运行神器--用HHVM减少你一半的服务器相关推荐

  1. 推荐两款支持在linux下运行ASP.NET网站的国产免费WEB服务器软件

    推荐两款支持在linux下运行ASP.NET网站的国产免费WEB服务器软件 1.kangle kangle web server是一款跨平台(windows/linux/bsd).功能强大.安全稳定. ...

  2. 后台运行神器screen

    不需要nohup,tmux什么的,一个screen完美解决 screen -S whatever # 创建一个新终端 CTRL + A + D # 挂起 screen -r whatever # 恢复 ...

  3. 素材网站|设计师下半年的工作流程至少减少了一半...

    设计提高输出效率,这个问题绝对是专业设计的苦恼. 那就必须有几个得心应手的素材网站! 对很多人来说,一张好的图片莫过于"高清+高质感"的组合, 但是"度娘"图片 ...

  4. 路透社:特斯拉5月在华汽车订单较4月减少近一半

    据路透报道,援引内部数据显示,特斯拉公司5月份在中国的汽车订单与4月份相比几乎减半.报告称,该公司5月份在中国的月度净订单从4月份的18,000多份降至约9,800份, 中国是这家电动汽车制造商仅次于 ...

  5. linux运行隐藏文件,Linux下如何隐藏文件_网站服务器运行维护,Linux,隐藏文件

    linux系统怎样安装软件_网站服务器运行维护 linux系统安装软件的方法:1.使用apt命令进行安装,如[apt install app_name]:2.使用rpm命令进行安装,如[rpm -i ...

  6. win10 php mysql,Windows10本地搭建IIS+PHP+MYSQL+phpMyAdmin运行环境图文教程(也可用于服务器)...

    准备工作 需要提前下载的工具软件 1.php5.45,windows应该使用PHP的非线程安全(NTS)版本.我经常用织梦程序做站,所以选择php-5.4.45-nts-Win32-VC9-x86.z ...

  7. m4a打开服务器运行失败,WINCC打不开项目,服务器运行失败

    WINCC打不开项目,提示信息:ox80080005 服务器运行失败,还有HResult error:请求数据存储接口时出错,请问高手,应该怎么解决这个问题,谢谢 问题补充: 但是我这里的DCOM没有 ...

  8. 把运行在 Docker 容器内的 Microsoft SQL 服务器部署到 SAP Kyma 中

    在阅读这篇文章之前,Jerry 假设您已经读过了这篇在 Docker 里运行 Microsoft SQL 服务器. 本地项目地址:C:\Code\referenceCode\SAP Kyma教程例子 ...

  9. 在用的虚拟服务器减少内存,降低虚拟服务器内存使用率

    降低虚拟服务器内存使用率 内容精选 换一换 本节定义了裸金属服务器上报云监控服务的监控指标的命名空间,监控指标列表和维度定义,用户可以通过云监控服务控制台或API接口来检索裸金属服务器产生的监控指标和 ...

最新文章

  1. newman的键盘不错
  2. unique函数_走进C++11(三十四)unique_ptr
  3. java代码怎样连接es,Elasticsearch 连接ES的两种方式
  4. Project Euler 126 - Cuboid layers
  5. NASA WorldWind1.4.0源代码调试总结
  6. 基于visual Studio2013解决C语言竞赛题之0505选数
  7. oracle 9i从入门到精通读书笔记2
  8. 对比了一下Hyper-v和Vmware,有发现.
  9. 安徽工业大学java实验报告_安徽工业大学java实验报告.doc
  10. 安装FirefoxSetup,在FirefoxSetup中安装firebug、firepath及简单的xpath使用
  11. php laravel 中文手册,Laravel 5.6 中文离线手册文档(兼容5.5)(PDF版)
  12. Github中那些迷之缩写?LGTM?
  13. s3c2440芯片累加汇编语言,S3C2440—3.用点亮LED来熟悉裸机开发的详细流程
  14. 楚留香手游服务器维护,楚留香手游3月1日更新全职业调整一览 6门派职业调整汇总...
  15. js二级联动,购物车
  16. IntelliJ IDEA——SVN的配置及使用
  17. AppCan开发框架
  18. 高新技术企业认定的申报程序
  19. js实现上拉加载更多
  20. 汽车产业链SCP分析框架-湖北

热门文章

  1. vs账号状态异常_西甲第35轮直播:皇家马德里vs阿拉维斯 皇马气势汹汹欲冲连胜势头!...
  2. RecyclerView添加头条目显示空白的解决方案
  3. GraphViz :1 安装和简单使用
  4. zimbra邮件服务器配置,Zimbra邮件服务器无需登录任意邮箱伪造漏洞修复
  5. python判断值是否在excel中_python接口自动化测试之根据excel中的期望结果是否存在于请求返回的响应值中来判断用例是否执行成功...
  6. 2021-03-10 Python多线程爬虫快速批量下载图片
  7. sqlserver 删除字段_SQL Server 执行计划缓存
  8. 安卓 spinner下拉框 做模糊查询_如何用一张图来做全年/去年的部门离职率动态对比...
  9. spring service 怎么拿到数据源信息_SSM(SpringMVC + Spring + MyBatis)中各层作用及关系Ⅰ...
  10. 统计学习笔记(4)——朴素贝叶斯法