读文档不完全容易出事:
1. 配置SElinux和ifcfg-eth0 参照:http://www.cnblogs.com/the-moving-ear/p/3591523.html
2. 着手安装HHVM;详细解说参照:http://lustlost.blog.51cto.com/2600869/1285597
http://hi.baidu.com/bngoogle/item/02b38601c7432dca90571808
我选择source编译安装,安装HHVM的github文档指导
链接:https://github.com/facebook/hhvm/wiki/Building-and-installing-HHVM-on-CentOS-6.3
这是完成安装master并测试phpmyadmin后的第4天。现在整理下正确的安装步骤,免得后来者受累(反正我实验了很多次,最后才发现boost版本的问题)
第一次,按照github 上hhvm centos6.3的安装文档,编译安装了十多遍,最终都失败了。
1> 出现的有关magickwand和imagemagick以及imagick之类的错误是因为cmake的时候没有指定ImageMagick,magickwand相关的配置路径,这个是我犯了多次的错误,受文档影响了(没有读完和理解github文档,其实是自己坑自己)。
2> 在make 进行中多会出现boost的相关方法或者变量找不到导致的error,我想根据我在centos6.3安装的boost,gcc等,可以确认,boost版本应该升级了,(文档推荐的boost是1.50,但是每次到了100%就抛出了boost相关error),使用1.55.0的试试。
两个同事,使用的同一个版本的hhvm 2.5.0(master),一个是arch ,另一个是ubuntu,完美安装,用他们说的话是没有挑战性。我安装却让hhvm make error百出。他们最后都没有完全跑一边phpmyadmin。
3> 这个是我在cmake使用的配置,算是经验之谈,请先使用cmake -LA看看包的路径是否正确:
cmake -D Boost_FILESYSTEM_LIBRARY_DEBUG="/usr/lib/libboost_filesystem.so" -DBoost_FILESYSTEM_LIBRARY_RELEASE="/usr/lib/libboost_filesystem.so" -DBoost_INCLUDE_DIR="/usr/include" -DBoost_LIBRARY_DIR="/usr/lib" -DBoost_PROGRAM_OPTIONS_LIBRARY_DEBUG="/usr/lib/libboost_program_options.so" -DBoost_PROGRAM_OPTIONS_LIBRARY_RELEASE="/usr/lib/libboost_program_options.so" -DBoost_REGEX_LIBRARY_DEBUG="/usr/lib/libboost_regex.so" -DBoost_REGEX_LIBRARY_RELEASE="/usr/lib/libboost_regex.so" -DBoost_SYSTEM_LIBRARY_DEBUG="/usr/lib/libboost_system.so" -DBoost_SYSTEM_LIBRARY_RELEASE="/usr/lib/libboost_system.so" -DBoost_THREAD_LIBRARY_DEBUG="/usr/lib/libboost_thread.so" -DBoost_THREAD_LIBRARY_RELEASE="/usr/lib/libboost_thread.so" -D LIBMAGICKWAND_INCLUDE_DIRS="/usr/local/include/ImageMagick-6" -D LIBMAGICKWAND_LIBRARIES="/usr/local/lib/libMagickWand-6.Q16.so" -D LIBMAGICKCORE_LIBRARIES="/usr/local/lib/libMagickCore-6.Q16.so" -D LIBVPX_INCLUDE_DIRS="/usr/lib64" -D LIBXSLT_INCLUDE_DIR="/usr/lib64" -D LIBXSLT_LIBRARIES="/usr/lib64/libxslt.so" -DCMAKE_VERBOSE_MAKEFILE=on -DCMAKE_C_COMPILER="/usr/bin/gcc" -DCMAKE_CXX_COMPILER="/usr/bin/g++" .
[注]因为之前使用distcc所以配置了下划线部分,这个不是必需的
最后,在这里,我觉得没有必要把github上的依赖软件的安装过程搬到这里了,大家还是以参考为主。因为各个系统里面包的版本不尽相同,最后导致的结果也不同。
3. 测试对比用例 90000W次+=,golang的协程goroutine执行的是2.9'',非goroutine执行16.3'',count = count + 1执行5.5''
http://www.oschina.net/question/55981_134857
稍后看看hhVM下的php
hhvm命令行
.1. 900000 for += costs time:0.12407088279724<br> The sum is:404999550000
.2. 9000000 for += costs time:1.3035469055176<br> The sum is:40499995500000
.3. 90000000 for += costs time:12.312831878662<br> The sum is:4049999955000000
.4. 900000000 for += costs time:128.34153389931<br> The sum is:404999999550000000
这么推算下去是90亿耗时1200''+
试试count = count + i这种是否会快些:
900000000 for count = count + i costs time:138.50588703156<br> The sum is:404999999550000000
结果分析和goroutine完全不同理。再来一次
900000000 for count = count + i costs time:139.21196985245<br> The sum is:404999999550000000
试试小数量的:
900000 for count = count + i costs time:0.13920712471008<br> The sum is:404999550000
非命令行(http请求)
.1. 900000 for += costs time:0.073056936264038
The sum is:404999550000
.2. 9000000 for += costs time:0.61787700653076
The sum is:40499995500000
.3. 90000000 for += costs time:6.0881640911102
The sum is:4049999955000000
.4. 900000000 推算下去会超时,这个无所谓,关键是数据有意思,数据能说明一切。快了一倍多点的时间。
BTW: count = count + i这种就不测了,明显跟编译语言不同。
原生php的结果:
.1. 900000 for += costs time:0.18309187889099<br> The sum is:404999550000
我只测了这一个原生的,效率比对已经显而易见。
--我是分隔线--
下面的别看了,以前的安装记录。
【1】失败多次,问题多多,好多坑啊。
这里是安装4天后整理的:
因环境而异:先把boost remove掉 yum erase boost
- 能装的还是都装了先,免得像我编译了99%,又回来继续:
sudo yum install git svn cpp make autoconf automake libtool patch memcached gcc-c++ cmake wget boost-devel mysql-devel pcre-devel gd-devel libxml2-devel expat-devel libicu-devel bzip2-devel oniguruma-devel openldap-devel readline-devel libc-client-devel libcap-devel binutils-devel pam-devel elfutils-libelf-devel ImageMagick* MagickWand* libunwind libunwind-devel inotify-tools freetype-devel libjpeg-devel libpng-devel libtiff-devel giflib-devel zlib-devel ghostscript-devel djvulibre-devel libwmf-devel jasper-devel libtool-ltdl-devel libX11-devel libXext-devel libXt-devel lcms-devel librsvg2-devel OpenEXR-devel graphviz fftw3 jasper jasper-libs jasper-devel kdelibs-devel libxslt-devel python*
[2014-03-15 20:01] 今天git pull了一次hhvm,make到100%还是因为imageMagick的问题报了error
最好先这个检测,依赖的库及其路径: cmake -LA|grep -i magick
发现imagemagick,magickwand的路径配置有问题,最后得rm -f CMakeCache.txt,然后执行上面的camke 路径配置
再次make -j4看看结果吧【分布式编译比较快】
如果库安装了,但是cmake仍旧报错或者make的时候报错,就加上依赖库的安装路径【自己编译安装的路径】
yum install perl-devel
yum install *base_devel*
- 6.3的需要升级boost ,下载:http://jaist.dl.sourceforge.net/project/boost/boost/1.50.0/boost_1_50_0.tar.bz2 。boost一定的安装好
安装boost时候一定记得这个:export CMAKE_PREFIX_PATH=/usr
./bjam --layout=system install 这一步,看看具体是否需要加上--without-python
- 在最后cmake 时候会报错,类似:
Could NOT find LibXslt(missing: LIBXSLT_LIBRARIES LIBXSLT_INCLUDE_DIR)
-- Could NOT find LibUODBC (missing: LIBODBC_LIBRARIES LIBODBC_INCLUDE_DIRS)
-- Could NOT find LibVpx (missing: LIBVPX_INCLUDE_DIRS)
-- Could NOT find Editline (missing: EDITLINE_LIBRARIES EDITLINE_INCLUDE_DIRS)
-- Could NOT find LIBINOTIFY (missing: LIBINOTIFY_LIBRARY)
-- Could NOT find LIBICONV (missing: LIBICONV_LIBRARY)
-- Looking for curl_multi_select - not found
-- Looking for event_get_version_number - not found
针对这几个missing,有人采取ignore[https://github.com/facebook/hhvm/issues/1208]
[2014-03-12 09:03] 但是我在最后make的时候,竟然报代码语法错误,跟别人的问题完全是两回事......安装调试中,shit
[ 37%] Building CXX object hphp/runtime/CMakeFiles/hphp_runtime_static.dir/ext/imagick/ext_imagick.cpp.o
In file included from /data1/tools/hhvm/hphp/runtime/ext/imagick/ext_imagick.cpp:18:0:
/data1/tools/hhvm/hphp/runtime/ext/imagick/ext_imagick.h:24:29: fatal error: wand/MagickWand.h: No such file or directory
compilation terminated.
[58%]/data1/tools/hhvm/hphp/runtime/ext/imagick/constants.cpp:20:29: fatal error: wand/MagickWand.h: No such file or directory
各种问题啊,都安装了,路径却错误?
再编译安装ImageMagick
参考这个:http://www.cnblogs.com/zhangwenzhao/p/3235765.html
http://www.imagemagick.org/script/download.php
http://www.imagemagick.org/download/linux/
[安装完记得配置PATH]
http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
解决方法:vim CMakeCache.txt
找到: LIBMAGICKWAND_INCLUDE_DIRS:PATH=/usr/local/include/ImageMagick-6 【这里是你的wand/MagickWand.h路径】
Fantastic
[99%] 都到这个时候了,boost方法和变量找不到.... wonderful world
vim ./CMake/HPHPCompiler.cmake
47和51行 在-std=gnu++11 后面加上 -lboost_system
[100%] 还是报错,我的泪....
https://github.com/facebook/hhvm/issues/2072
cmake这一步,得看具体情况了,我采用了:
cmake -D CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH -D LIBMAGICKWAND_INCLUDE_DIRS="/usr/lib64" -D LIBODBC_INCLUDE_DIRS="/usr/lib64" -D LIBODBC_LIBRARIES="/usr/lib64" -D LIBVPX_INCLUDE_DIRS="/usr/lib64" -D LIBXSLT_INCLUDE_DIR="/usr/lib64" -D LIBXSLT_LIBRARIES="/usr/lib64/libxslt.so" -D READLINE_INCLUDE_DIR="/usr/lib64" -D READLINE_LIBRARY="/usr/lib64/readline.so" -D EDITLINE_INCLUDE_DIRS="/usr/lib64" -D EDITLINE_LIBRARIES="/usr/lib64/libedit.so" -D LIBINOTIFY_LIBRARY=/usr/lib64/libinotifytools.so.0 -D LIBEVENT_LIB=/usr/lib/libevent.so -D LIBEVENT_INCLUDE_DIR=/usr/include -D LIBICONV_LIBRARY=/usr/local/lib/libiconv.so -D CMAKE_EXE_LINKER_FLAGS="-lboost_thread -lboost_system" -DImageMagick_MagickCore_INCLUDE_DIR=/usr/local/include/ImageMagick-6 -DImageMagick_MagickWand_INCLUDE_DIR=/usr/local/include/ImageMagick-6 -DLIBMAGICKCORE_INCLUDE_DIRS=/usr/ -DLIBMAGICKWAND_INCLUDE_DIRS=/usr/local/include/ImageMagick-6 .
【目前遗留问题】
CMake Warning at CMake/HPHPSetup.cmake:54 (message):
chrpath not found, rpath will not be stripped from installed binaries
Call Stack (most recent call first):
hphp/CMakeLists.txt:18 (include)
我试着解决,升级jemalloc
http://www.canonware.com/download/jemalloc/jemalloc-3.5.1.tar.bz2 [升级完了,问题没有解决]
直接忽略这个.....
【记得rm -f CMakeCache.txt && cmake [.....] && make即可】
以上是安装过程的问题记录,整体来说累死我了,但很有意义。
【2】 该整合php项目了:
- helloworld先
我搭建了两台虚拟机
说明:第一台是工作的开发环境,怕受影响,再者是为了以后的测试对比。第二台干净的basic server