又爱又恨的HHVM

  • A+
所属分类:运维笔记

这几天想更新下主机的web服务器,本来是想着用PHP7+nginx+MySQL,然后偶然发现可以用HHVM代替PHP,而且是采用的JIT,加快了PHP执行的效率,主要思想就是把PHP转换成C++,然机器更容易执行!

HHVM(HipHop Virtual Machine)会将PHP代码转换成高级别的字节码(通常称为中间语言)。然后在运行时通过即时(JIT)编译器将这些字节码转换为x64的机器码。在这些方面,HHVM十分类似与C#的CLR和Java的JVM。
2008年Facebook就开始使用HipHop(现在成为HPHP),这是一种PHP执行引擎;最初是为了将Fackbook的大量PHP代码转成C++,以提高性能和节约资源。最初的版本成为HPHPc,是一个PHP到C++的编译器。

之后的两年里,Fackbook又向HipHop中增加了HPHPi和HPHPd,HPHPi其实就是开发版的HPHP,HPHPd则是HipHop的调试器。通过HPHPd开发人员可以单步调试运行在HipHop平台上的PHP代码。

使用HipHop的PHP代码在性能上最大可以是原生的6倍。但是,第一版的HipHop有不少确定,具体如下:
HPHPc无法完全支持PHP的所有特性,最典型的是无法支持create_function()和eval()两个函数。但老实说,不支持后一个函数我不觉得是件坏事。
Facebook的开发者不得不维护两种不同的引擎(HPHPc和HPHPi),这直接导致了重复劳动和资源浪费。
最后,HPHPc部署步骤繁杂,这点很让PHP开发者头疼。.
在2010年初,Fackbook因为这些问题做出了2个重大的决定。首先是将HipHop平台开源,通过这种方式来加快HipHop的发展。
其次,Facebook开始开发HipHop的更高版本,也就是HHVM(HipHop虚拟机),HHVM加强了HPHPc的健壮性,同时还修复了许多重要错误。

HHVM是在HPHPc的基础上构建,它会将PHP代码转换成高级别的字节码(一种中间语言),在运行时即时(JIT)编译器会将这些字节码翻译成机器码。

下面是一些关于字节码、机器码和即时(JIT)编译器的概念,快速的浏览以下概念,可以清楚这些概念在HHVM所处的角色。
字节码:是一种人类无法阅读的代码,专门用来给编译器高效执行的。当HHVM首次加载项目时,它会将所有的PHP代码转换成字节码;字节码的生成是与平台无关的。
机器码:是一系列供CPU执行的指令。用过汇编的都应该清楚机器码,估计没人喜欢用汇编编程。通过编译器就可以把汇编转成机器码,然后供CPU处理。
JIT(即时)编译器:即时编译是种软件优化技术,指在运行时才会去编译字节码。字节码会存放在内存中,然后JIT编译器会根据需要加载并编译所涉的字节码。

好了,装逼结束,下面就安装HHVM,然后让网站跑起来!结果装完(已经是到了凌晨了),打开几个页面,卧槽!简直飞起啊!而且我的wordpress还没有使用到缓存!

结果第二天,悲剧了!

又爱又恨的HHVM

swap给了1G ,占用这么多!物理内存直接彪到94%,我这1+G 的机子,还没到2G 呢,直接内存耗尽!然后果断使用PHP解析php文件了!

期间还会偶尔的nginx响应502bad gate way!

所以说,如果你是个人博客,内存没有2G +的话,还是考虑php7+nginx(tengine)+mysql吧!

 

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: