设为首页 收藏本站
查看: 475|回复: 0

[经验分享] PHP运行神器

[复制链接]

尚未签到

发表于 2018-12-20 09:54:29 | 显示全部楼层 |阅读模式
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
  

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-653467-1-1.html 上篇帖子: 数据结构与算法(php版) 下篇帖子: PHP独立编译安装扩展(mysqli,pdo
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表