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

简介:

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


本文转自lustlost 51CTO博客,原文链接:http://blog.51cto.com/lustlost/1285597,如需转载请自行联系原作者

相关文章
|
10月前
|
弹性计算 Ubuntu Linux
一键部署OpenWebUI+Ollama到阿里云ECS,轻松运行DeepSeek!(保姆级教程)
在当今数据驱动的时代,快速部署和管理大模型成为企业的关键需求。阿里云提供了一键部署OpenWebUI+Ollama的便捷方案,支持本地大模型运行和管理。用户也可以选择连接阿里云百炼的在线模型。
一键部署OpenWebUI+Ollama到阿里云ECS,轻松运行DeepSeek!(保姆级教程)
|
10月前
|
PHP Docker 容器
如何在宿主主机运行容器中的php守护进程
在Docker容器中同时运行多个程序(如Nginx+PHP+Ftp)时,需用`docker exec`命令启动额外服务。首先通过`php -v`查看PHP版本,再用`which php-fpm7.4`确认PHP安装路径,通常返回`/usr/sbin/php-fpm7.4`。最后直接运行该路径启动PHP-FPM服务,确保其正常工作。
185 14
|
10月前
|
应用服务中间件 PHP nginx
当你的nginx服务器和php服务器不在一起的时候,这个nginx 的root目录问题
两个服务器的网站代码目录需要对齐,docker容器里面也是一样
|
弹性计算 监控 容灾
阿里云ECS提供强大的云上灾备解决方案,通过高可用基础设施、多样的数据备份方式及异地灾备服务,帮助企业实现业务的持续稳定运行
在数字化时代,企业对信息技术的依赖加深,确保业务连续性至关重要。阿里云ECS提供强大的云上灾备解决方案,通过高可用基础设施、多样的数据备份方式及异地灾备服务,帮助企业实现业务的持续稳定运行。无论是小型企业还是大型企业,都能从中受益,确保在面对各种风险时保持业务稳定。
275 4
|
自然语言处理 编译器 应用服务中间件
PHP在服务器上的运行过程
PHP在服务器上的运行过程
215 7
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
290 3
|
监控 PHP Apache
优化 PHP-FPM 参数配置:实现服务器性能提升
优化PHP-FPM的参数配置可以显著提高服务器的性能和稳定性。通过合理设置 `pm.max_children`、`pm.start_servers`、`pm.min_spare_servers`、`pm.max_spare_servers`和 `pm.max_requests`等参数,并结合监控和调优措施,可以有效应对高并发和负载波动,确保Web应用程序的高效运行。希望本文提供的优化建议和配置示例能够帮助您实现服务器性能的提升。
665 3
|
2月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
227 10
|
2月前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。
|
2月前
|
弹性计算 ice
阿里云4核8g服务器多少钱一年?1个月和1小时价格,省钱购买方法分享
阿里云4核8G服务器价格因实例类型而异,经济型e实例约159元/月,计算型c9i约371元/月,按小时计费最低0.45元。实际购买享折扣,1年最高可省至1578元,附主流ECS实例及CPU型号参考。
361 8