What's HHVM?
HHVM is an open-source virtual machine designed for executing programs written in Hackand PHP. HHVM uses a just-in-time (JIT) compilation approach to achieve superior performance while maintaining the flexibility that PHP developers are accustomed to. To date, HHVM (and its predecessor HPHPc before it) has realized over a 9x increase in web request throughput and over a 5x reduction in memory consumption for Facebook compared with the PHP 5.2 engine + APC.HHVM runs much of the world’s existing PHP. Developers and hosts are adopting HHVM. We are aware of minor incompatibilities (please open issues when you find them), but we can run the top 20 Github PHP frameworks out of the box. The HHVM team, along with many wonderful community members, has made it a stated, high priority goal to run all existing PHP code existing out in the wild.
Prerequisites
You must compile the source code in a PC or VPS with RAM >= 2GB.Or you can download the compiled version
After downloaded the compiled version, please exact it to
/tmp
.Prepare
We are not using sudo here because it makes the columns so long. Do it yourself or just be root here, for a short while.First of all, you need something from epel and remi:
rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm # ImageMagickThen get some development packages:
# Use bash brace extension here or the list would be really frightening yum install cpp gcc-c++ cmake git psmisc {binutils,boost,jemalloc}-devel \ {sqlite,tbb,bzip2,openldap,readline,elfutils-libelf,gmp,lz4,pcre}-devel \ lib{xslt,event,yaml,vpx,png,zip,icu,mcrypt,memcached,cap,dwarf}-devel \ {unixODBC,expat,mariadb}-devel lib{edit,curl,xml2,xslt}-devel \ glog-devel oniguruma-devel inotify-tools-devel ocaml # HHVM won't build without ImageMagick from remi failing after hphp_runtime_static yum remove ImageMagick # If it's already installed yum install ImageMagick-last\* --enablerepo=remi # Newer oneFix the bug for
glog-devel
ln -s /usr/lib64/libglog.so /usr/lib/libglog.so
Grab the Source
cd /tmp git clone https://github.com/facebook/hhvm -b master hhvm --recursive cd hhvm
Then build it!
# ./configure # That is a cmake wrapper, ignore it. cmake \ -DLIBMAGICKWAND_INCLUDE_DIRS="/usr/include/ImageMagick-6" \ -DLIBMAGICKCORE_LIBRARIES="/usr/lib64/libMagickCore-6.Q16.so" \ -DLIBMAGICKWAND_LIBRARIES="/usr/lib64/libMagickWand-6.Q16.so" . make -j$(($(nproc)+1)) # make with CORE_COUNT+1 threads, that would be fast. You may run out of RAM # Test.. ./hphp/hhvm/hhvm --version # Install it.. sudo make install
Add HHVM to Services
Usingsystemctl
:Save following to
/usr/lib/systemd/system/hhvm.service
[Unit] Description=HHVM HipHop Virtual Machine (FCGI) [Service] ExecStart=/usr/local/bin/hhvm --config /etc/hhvm/server.ini \ --config /etc/hhvm/php.ini \ --config /etc/hhvm/config.hdf --user nginx --mode daemon -vServer.Type=fastcgi -vServer.Port=9000 [Install] WantedBy=multi-user.targetAnd do some systemctl work to make it start automatically:
systemctl enable hhvm systemctl start hhvm systemctl status hhvmUsing
service
:Save following to
/etc/init.d/hhvm
#!/bin/bash # # /etc/init.d/hhvm -- startup script for HHVM FastCGI # # chkconfig: 345 26 74 # description: HHVM (aka the HipHop Virtual Machine) is an open-source virtual machine designed for executing programs written in Hack and PHP # processname: hhvm ### BEGIN INIT INFO # Provides: hhvm # Required-Start: $local_fs # Required-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: start and stop hhvm # Description: HHVM (aka the HipHop Virtual Machine) is an open-source virtual machine designed for executing programs written in Hack and PHP ### END INIT INFO # Source function library. . /etc/rc.d/init.d/functions hhvm=/usr/local/bin/hhvm prog=`/bin/basename $hhvm` lockfile=/var/lock/subsys/hhvm pidfile=/var/run/hhvm/pid RETVAL=0 test -x /usr/local/bin/hhvm || exit 1 start() { echo -n $"Starting $prog: " daemon --pidfile ${pidfile} ${hhvm} --config /etc/hhvm/server.ini --mode daemon RETVAL=$? echo [ $RETVAL = 0 ] && touch ${lockfile} return $RETVAL } stop() { echo -n $"Stopping $prog: " killproc -p ${pidfile} ${prog} RETVAL=$? echo [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} } rh_status() { status -p ${pidfile} ${hhvm} } case "$1" in start) rh_status >/dev/null 2>&1 && exit 0 start ;; stop) stop ;; reload|force-reload|restart|try-restart) stop start ;; status) rh_status RETVAL=$? ;; *) echo "Usage: /etc/init.d/hhvm {start|stop|restart|status}" exit 2 esac exit $RETVALAdd it to service using following commands:
chkconfig --add hhvm chkconfig hhvm onThen you can start up HHVM using:
service hhvm start
Config HHVM
mkdir /etc/hhvm mkdir /var/run/hhvm sudo chown nginx:nginx /var/run/hhvm mkdir /var/log/hhvm sudo chown nginx:nginx /var/log/hhvmCreate
config.hdf
in /etc/hhvm
: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 = }Create
server.ini
in /etc/hhvm
:; 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.use_log_file = true hhvm.log.file = /var/log/hhvm/error.log hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbcCreate
php.ini
in /etc/hhvm
:hhvm.mysql.socket = /tmp/mysql.sock hhvm.server.expose_hphp = true memory_limit = 400M post_max_size = 50M
0 comments:
Post a Comment