安装HHVM开始:
# yum install http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
# cd /etc/yum.repos.d
# wget http://www.hop5.in/yum/el6/hop5.repo
# yum remove libevent-devel libevent-doc
# yum install hhvm
查看HHVM是否安装成功:
# hhvm --version
显示如下信息,则说明安装成功:
HipHop VM 3.2.0 (rel)
Compiler: tags/HHVM-3.2.0-0-g01228273b8cf709aacbd3df1c51b1e690ecebac8
Repo schema: c52ba40f4a246d35a88f1dfc1daf959851ced8aa
HipHop VM 3.2.0 (rel)
Compiler: tags/HHVM-3.2.0-0-g01228273b8cf709aacbd3df1c51b1e690ecebac8
Repo schema: c52ba40f4a246d35a88f1dfc1daf959851ced8aa
使用 Nginx + HHVM:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9001;
# fastcgi_pass unix:/var/run/hhvm/sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
配置service管理hhvm:
cd /etc/init.d/
rm -rf hhvm #官方默认脚本是以www运行,建议用我修改后的
wget http://blog.linuxeye.com/wp-content/uploads/2014/05/hhvm --no-check-certificate
chmod +x hhvm
chkconfig hhvm on
/
etc
/
init
.
d
/hhvm脚本内容如下:
#!/bin/bash
# config: /etc/hhvm/server.ini
# config: /etc/sysconfig/hhvm
# pidfile: /var/run/hhvm/hhvm.pid
# Description: Starts The HHVM FastCGI Daemon
# Standard LSB functions
#. /lib/lsb/init-functions
# Source function library.
. /etc/init.d/functions
# Check that networking is up.
. /etc/sysconfig/network
if [ "$NETWORKING" = "no" ]
then
exit 0
fi
RETVAL=0
HHVM=/usr/bin/hhvm
prog="Hhvm"
pidfile=${PIDFILE-/var/run/hhvm/pid}
lockfile=${LOCKFILE-/var/run/hhvm/lock}
CONFIG_HDF_FILE="/etc/hhvm/config.hdf"
CONFIG_FILE="/etc/hhvm/server.ini"
SYSTEM_CONFIG_FILE="/etc/hhvm/php.ini"
MODE=daemon
USER=www
ARGS="--config ${CONFIG_FILE} --config ${SYSTEM_CONFIG_FILE} --config ${CONFIG_HDF_FILE}"
if [ -f /etc/sysconfig/hhvm ]; then
. /etc/sysconfig/hhvm
fi
start() {
echo -n $"Starting $prog: "
dir=$(dirname ${pidfile})
[ -d $dir ] || mkdir $dir
${HHVM} --mode ${MODE} --user ${USER} ${ARGS}
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch ${lockfile}
}
stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} ${HHVM}
RETVAL=$?
echo
if [ $RETVAL -eq 0 ] ; then
rm -f ${lockfile} ${pidfile}
fi
}
restart () {
stop
start
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p ${pidfile} ${HHVM}
RETVAL=$?
;;
restart)
restart
;;
*)
echo $"Usage: $prog {start|stop|status|restart}"
RETVAL=2
esac
exit $RETVAL
配置HHVM,修改 /etc/hhvm/config.hdf:
ResourceLimit {
CoreFileSize = 0 # in bytes
MaxSocket = 10000 # must be not 0, otherwise HHVM will not start
SocketDefaultTimeout = 5 # in seconds
MaxRSS = 0
MaxRSSPollingCycle = 0 # in seconds, how often to check max memory
DropCacheCycle = 0 # in seconds, how often to drop disk cache
}
Log {
Level = Info
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 {
ReadOnly = false
ConnectTimeout = 1000 # in ms
ReadTimeout = 1000 # in ms
SlowQueryThreshold = 1000 # in ms, log slow queries as errors
KillOnTimeout = false
}
Mail {
SendmailPath = /usr/sbin/sendmail -t -i
ForceExtraParameters =
}
修改属主:
chown -R www:www /var/run/hhvm
chown -R www:www /var/log/hhvm
chmod -R 755 /var/run/hhvm
chmod -R 755 /var/log/hhvm
修改 /etc/hhvm/server.ini,(默认配置为server.hdf,为旧版本使用):
; php options
pid = /var/run/hhvm/pid
; hhvm specific
; hhvm.server.port = 9001
hhvm.server.file_socket = /var/run/hhvm/sock
hhvm.server.type = fastcgi
hhvm.server.default_document = index.php
hhvm.log.level = Info
hhvm.log.always_log_unhandled_exceptions = true
hhvm.log.runtime_error_reporting_level = 8191
hhvm.log.use_log_file = true
hhvm.log.file = /var/log/hhvm/error.log ; 请注意此处目录属主要和HHVM相同,并且目录可写
hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc
hhvm.mysql.typed_results = false
修改 /etc/hhvm/php.ini:
hhvm.mysql.socket = /tmp/mysql.sock ;指定mysql.sock路径(hhvm默认路径sock路径是/var/lib/mysql/mysql.sock)
expose_php = 0 ;关闭头信息X-Powered-By (和hhvm.server.expose_hphp = false作用一样)
memory_limit = 400M
post_max_size = 50M
最后,启动 HHVM服务:
# service hhvm start
另外,添加Nginx虚拟机脚本:
wget http://blog.linuxeye.com/wp-content/uploads/2014/05/vhost_hhvm.sh --no-check-certificate
注意事项:
hhvm进程经常会自杀,所以必须要有一个守护进程。这里使用supervisor