讀文檔不完全容易出事:
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