一聚教程网:一个值得你收藏的教程网站

热门教程

hhvm下Nginx环境搭建步骤详解

时间:2022-06-30 18:44:05 编辑:袖梨 来源:一聚教程网

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编译器会根据需要加载并编译所涉的字节码。
通过以上技术,HipHop和HHVM获得了性能的提升。

安装步骤:
1. 利用《lnmp一键安装包》安装Nginx和MySQL

 代码如下 复制代码
yum -y install wget screen # for CentOS/Redhat
#apt-get -y install wget screen # for Debian/Ubuntu
wget http://blog.linuxeye.com/lnmp.tar.gz
#wget http://blog.linuxeye.com/lnmp-full.tar.gz # 包含源码(官方下载太慢)
tar xzf lnmp.tar.gz
cd lnmp
#如果需要修改目录(安装、数据存储、Nginx日志),请修改options.conf文件
screen -S lnmp # 如果网路出现中断,可以执行命令`screen -r lnmp`重新连接安装窗口
./install.sh

建议选择如下(不选择安装php):

hhvm下Nginx环境搭建步骤详解
2. 安装hhvm(CentOS 6 64bit)

 代码如下 复制代码
rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
cd /etc/yum.repos.d
wget http://www.hop5.in/yum/el6/hop5.repo
yum clean all
yum -y remove libevent-devel libevent #依赖包冲突,删除后会自动依赖安装
yum -y install hhvm

3. 配置
修改/usr/local/nginx/conf/nginx.conf使其中一段成为如下:

      

 代码如下 复制代码
  location ~ .*.(php|php5)?$  {
                fastcgi_pass   unix:/var/run/hhvm/sock;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include        fastcgi_params;
                }
service nginx reload

替换vhost.sh(支持hhvm方式添加虚拟主机)

 代码如下 复制代码
cd lnmp
mv vhost.sh{,_bk}
wget http://blog.linuxeye.com/wp-content/uploads/2014/05/vhost.sh
chmod +x vhost.sh

配置hhvm
修改/etc/hhvm/config.hdf,保持如下:

 代码如下 复制代码

PidFile = /var/run/hhvm/pid

Log {
  Level = Warning
  AlwaysLogUnhandledExceptions = true
  RuntimeErrorReportingLevel = 8191
  UseLogFile = true
  UseSyslog = false
  File = /var/log/hhvm/error.log
  Access {
    * {
      File = /var/log/hhvm/access.log
      Format = %h %l %u % t "%r" %>s %b
    }
  }
}

MySQL {
  TypedResults = false
}

配置以www运用运行:

 代码如下 复制代码
mkdir  /home/www
chown www.www /home/www

修改MySQL socket路径(hhvm默认路径sock路径是/var/lib/mysql/mysql.sock,不知道怎么修改,已在github提问):

 代码如下 复制代码
sed -i 's@^socket.*@socket = /var/lib/mysql/mysql.sock@g' /etc/my.cnf
service mysqld restart #重启数据库

配置service管理hhvm:

 代码如下 复制代码
cd /etc/init.d/
rm -rf hhvm
wget http://blog.linuxeye.com/wp-content/uploads/2014/05/hhvm
chmod +x hhvm
chkconfig hhvm on
service hhvm restart

添加虚拟主机:

vhost.sh #和lnmp添加虚拟主机一样
测试wordpress完美运行,且速度非常快;discuz后台正常,前台页面显示有问题,兼容性有待完善!

热门栏目