Blog

Blog

PHODAL

Amazon Linux HHVM 3 编译

记录一下好不容易编译成功的HHVM,已经没有办法测试一下这性能怎么样,不过,看上去感觉好像还好,不算太差,不算太强。

Amazon Linux HHVM

由于Amazon Linux是基于CentOS的,又找到一个合适的编译好的版本,于是只好起一个Instance来编译HHVM。官方文档

https://github.com/facebook/hhvm/wiki/Building-and-installing-HHVM-on-Amazon-Linux-2014.03

HHVM编译

安装HHVM依赖

注意:适用于Amazon Linux 2014.03

执行

sudo yum -y update && \
sudo yum -y install \
    autoconf \
    automake \
    binutils-devel \
    boost-devel \
    bzip2-devel \
    chrpath \
    cmake \
    cpp \
    curl-devel \
    elfutils-libelf-devel \
    expat-devel \
    gcc-c++ \
    gd-devel \
    git \
    jemalloc-devel \
    libIDL-devel \
    libc-client-devel \
    libcap-devel \
    libevent-devel \
    libicu-devel \
    libmcrypt-devel \
    libmemcached-devel \
    libtool \
    libxml2-devel \
    make \
    memcached \
    mysql-devel \
    oniguruma-devel \
    openldap-devel \
    pam-devel \
    patch \
    pcre-devel \
    readline-devel \
    svn \
    wget \
    libxslt-devel \
    ImageMagick-devel \
;

Checkout HHVM代码

cd ~ && \
git clone git://github.com/facebook/hhvm.git && \
cd hhvm && \
git checkout HHVM-3.3.0 && \
git submodule update --init --recursive && \
export CMAKE_PREFIX_PATH=`pwd`/.. && \
cd ..

HHVM Thread Building Blocks(tbb)编译

注意: 修改了第三行的代码,官方的文档上有错。

wget https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb42_20130725oss_src.tgz && \
tar zxvf tbb42*.tgz && \
cd tbb42_20130725oss && \
cd src && \
make && \
cd .. && \
sudo mkdir -p /usr/include/serial && \
sudo cp -a include/serial/* /usr/include/serial/ && \
sudo mkdir -p /usr/include/tbb && \
sudo cp -a include/tbb/* /usr/include/tbb/ && \
sudo cp build/linux_intel64*/libtbb.so.2 /usr/lib64/ && \
sudo ln -s /usr/lib64/libtbb.so.2 /usr/lib64/libtbb.so && \
cd ..

HHVM libDwarf编译

git clone git://git.code.sf.net/p/libdwarf/code libdwarf && \
cd libdwarf/libdwarf && \
git checkout 2346f43f57f0ae768adffa55ea84b281d3aa71da && \
./configure && \
make && \
sudo cp libdwarf.a /usr/lib64/ && \
sudo cp libdwarf.h /usr/include/ && \
sudo cp dwarf.h /usr/include/ && \
cd ../..

HHVM Google glog 编译

wget https://google-glog.googlecode.com/files/glog-0.3.3.tar.gz && \
tar zxvf glog-0.3.3.tar.gz && \
svn checkout http://google-glog.googlecode.com/svn/trunk/ google-glog && \
cd google-glog && \
./configure --prefix=/usr && \
make && \
sudo make install && \
cd ..

编译HHVM

1.刷新库缓存

sudo ldconfig

2.编译和安装

cd hhvm && \
cmake . && \
make && \
sudo make install

HHVM配置

创建配置文件server.hdf

PidFile = /var/run/hhvm/pid

Server {
  IP = 127.0.0.1
  Port = 9000
}

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
    }
  }
}

Repo {
  Central {
    Path = /var/log/hhvm/.hhvm.hhbc
  }
}

StaticFile {
  FilesMatch {
    * {
      pattern = .*\.(dll|exe)
      headers {
        * = Content-Disposition: attachment
      }
    }
  }

  Extensions {
    css = text/css
    gif = image/gif
    html = text/html
    jpe = image/jpeg
    jpeg = image/jpeg
    jpg = image/jpeg
    png = image/png
    tif = image/tiff
    tiff = image/tiff
    txt = text/plain
  }
}

MySQL {
  TypedResults = false
}

Eval {
        Jit = true
}

VirtualHost {
    * {
        Pattern = .*
        RewriteRules {
            * {
                 pattern = ^(.*)$
                 to = index.php$1
                 qsa = true
            }
        }
    }
}

HHVM启动配置

一个启动的脚本如下所示

/usr/local/bin/hhvm --mode daemon --user web --config /etc/hhvm/server.hdf -vServer.Type=fastcgi -vServer.Port=9000

创建启动脚本hhvm.sh

#!/bin/bash
program=`/usr/local/bin/hhvm --mode daemon --user web --config /etc/hhvm/server.hdf -vServer.Type=fastcgi -vServer.Port=9000`
pidfile=/var/run/hhvm/pid

if [ `ps -o %mem,pid,comm,args -C hhvm | perl -ane 'if($F[0] > 75.0){print $F[1] . "\n";}' | while read i;do echo "$(date): Killing $i" >> /home/scripts/killlog.log;kill $i;done` ];then
    $program &
fi

加入定时任务执行

 crontab -e

加入一行

 */5 * * * * /root/hhvm.sh

HHVM Nginx配置

修改原来的

 fastcgi_pass  unix:/tmp/php-cgi.sock;

 fastcgi_pass 127.0.0.1:9000;

一个简单的完整Nginx配置示例所下

server
{
    listen      80;
    server_name blog.phodal.com;
    index index.html index.htm index.php default.html default.htm default.php;
    root  /home/www/phodal

    include wordpress.conf;
    location ~ .*\.(php|php5)?$
    {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
        include fcgi.conf;
    }
}

关于我

Github: @phodal     微博:@phodal     知乎:@phodal    

微信公众号(Phodal)

围观我的Github Idea墙, 也许,你会遇到心仪的项目

QQ技术交流群: 321689806
comment

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Engineer, Consultant, Writer, Designer

ThoughtWorks 技术专家

工程师 / 咨询师 / 作家 / 设计学徒

开源深度爱好者

出版有《前端架构:从入门到微前端》、《自己动手设计物联网》、《全栈应用开发:精益实践》

联系我: h@phodal.com

微信公众号: 最新技术分享

标签