В топике описывается процедура установки HipHop VM из исходных кодов под Debian 7. Возможно, кому-то этот топик сэкономит время, нервы и поможет перешагнуть грабли, по которым прошлись мы.
- Условия тест-драйва
- Компиляция
- Конфигурация и запуск
- Настройка Nginx
- Сушите вёсла, приплыли
- Тесты
- Выводы
- Заключение
1. Условия тест-драйва
Машина на DigitalOcian за $5/мес:
- Память: 512 Мб
- Процессор: 1x 2000 МГц
- ОС: Debian 7.0 (Wheezy) x86_64
- Веб-сервер: Nginx 1.2.1
- SWAP: 500 Мб
2. Компиляция
Устанавливаем HipHop VM из исходников, т.к. актуальных пакетов найдено не было. Автор представленного на GitHub пакета HipHop VM для Debian 7 (Wheezy) больше пакет не поддерживает и его репозиторий недоступен (Если вы знаете, где можно найти пакет HipHop VM под Debian 7 — пожалуйста, отпишитесь в комментариях).
mkdir /opt/dev cd /opt/dev git clone git://github.com/facebook/hiphop-php.git export CMAKE_PREFIX_PATH=`pwd`/.. export HPHP_HOME=`pwd` sudo apt-get update sudo apt-get install git-core cmake g++ libboost1.48-dev libmysqlclient-dev \ libxml2-dev libmcrypt-dev libicu-dev openssl build-essential binutils-dev \ libcap-dev libgd2-xpm-dev zlib1g-dev libtbb-dev libonig-dev libpcre3-dev \ autoconf libtool libcurl4-openssl-dev libboost-regex1.48-dev libboost-system1.48-dev \ libboost-program-options1.48-dev libboost-filesystem1.48-dev wget memcached \ libreadline-dev libncurses-dev libmemcached-dev libbz2-dev \ libc-client2007e-dev libgoogle-perftools-dev \ libcloog-ppl0 libelf-dev libdwarf-dev libunwind7-dev subversion
Пакеты php5-mcrypt и php5-imagick, которые упоминают мануалы не ставим, т.к. нам они не нужны.
# libevent git clone git://github.com/libevent/libevent.git cd libevent git checkout release-1.4.14b-stable cat ../hiphop-php/hphp/third_party/libevent-1.4.14.fb-changes.diff | patch -p1 ./autogen.sh ./configure --prefix=$CMAKE_PREFIX_PATH make make install cd .. # curl git clone git://github.com/bagder/curl.git cd curl ./buildconf ./configure --prefix=$CMAKE_PREFIX_PATH make make install cd .. # glog svn checkout http://google-glog.googlecode.com/svn/trunk/ google-glog cd google-glog ./configure --prefix=$CMAKE_PREFIX_PATH make make install cd .. # jemaloc wget http://www.canonware.com/download/jemalloc/jemalloc-3.0.0.tar.bz2 tar xjvf jemalloc-3.0.0.tar.bz2 cd jemalloc-3.0.0 ./configure --prefix=$CMAKE_PREFIX_PATH make make install cd .. # libunwind wget 'http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz' tar -zxf libunwind-1.1.tar.gz cd libunwind-1.1 autoreconf -i -f ./configure --prefix=$CMAKE_PREFIX_PATH make install cd .. # удаляем лишнее rm -rf libevent curl google-glog jemalloc-3.0.0.tar.bz2 jemalloc-3.0.0 libunwind-1.1
Обратите внимание, что была установлена libunwind версии 1.1. С версией 1.0., которую советуют в мануалах, cmake падает с ошибкой.
cd hiphop-php # ещё раз выставляем HPHP_HOME, иначе - ошибка export HPHP_HOME=`pwd` cmake -D CMAKE_PREFIX_PATH=/opt/dev .
В параметре CMAKE_PREFIX_PATH передаём директорию, в которой находится папка hiphop-php с исходными кодами HipHop VM, иначе cmake падает с ошибкой (в мануалах об этом умалчивается).
Скрестив пальцы, запускаем компиляцию:
make
Через несколько минут компиляция падает примерно с такой ошибкой:
Please submit a full bug report, with preprocessed source if appropriate. See <file:///usr/share/doc/gcc-4.7/README.Bugs> for instructions. make[2]: *** [hphp/CMakeFiles/hphp_runtime_static.dir/runtime/vm/bytecode.cpp.o] Error 4 make[1]: *** [hphp/CMakeFiles/hphp_runtime_static.dir/all] Error 2 make: *** [all] Error 2
Удаляем файл /opt/dev/hiphop-php/CMakeCache.txt, увеличиваем файл подкачки до 1 Гб и повторно выставляем переменные окружения:
export CMAKE_PREFIX_PATH=`pwd`/.. export HPHP_HOME=`pwd`
Повторно запускаем make и ждём часа полтора…
3. Конфигурация и запуск
Создаём минимальный файл конфигурации HipHop VP примерно следующего содержания:
PidFile = /run/hiphop.pid Server { # Порт, по которому будем обращаться к виртуальной машине Port = 4849 # Путь к домашней директории проекта SourceRoot = /var/www/www.mysymfony2site.com/web/ } # Виртуальный хост, который перенаправляет запросы на app.php VirtualHost { * { Pattern = .* RewriteRules { * { pattern = .* to = app.php qsa = true } } } }
Запустить HipHop VM как демона можно следующей командой:
/opt/dev/hiphop-php/hphp/hhvm/hhvm --mode daemon --config /opt/dev/hiphop-php/hphp/config.hdf
Мы же запускаем сервер HipHop VM в консоли, чтобы на время отладки в реальном времени видеть все его «матюки»:
/opt/dev/hiphop-php/hphp/hhvm/hhvm --mode server --config /opt/dev/hiphop-php/hphp/config.hdf
4. Настройка Nginx
В локейшене Nginx, отвечающем за обработку динамики проксируем запрос на HipHop VM:
location ~ ^/(app|app_dev|config)\.php(/|$) { # Передача запроса HipHop VP proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://localhost:4849; }
5. Сушите вёсла, приплыли
Открываем страницу конфигурации Symfony2 www.mysymfony2site.com/config.php и видим несколько проблем и рекомендаций:
Отсутствует расширение intl, которое для нас критично. Найти способ доставить его не удалось (возможно, вы по этому поводу что-то подскажете).
Идём дальше и открываем основной сайт www.mysymfony2site.com/ и видим в открытой консоли сервера HipHop VP следующее сообщение об ошибке:
request.CRITICAL: Doctrine\ODM\MongoDB\Mapping\MappingException: No identifier/primary key specified for Document 'Project\MyBundle\Document\Visitor'. Every Document must have an identifier/primary key. (uncaught exception) at /var/www/www.mysymfony2site.com/vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/MappingException.php line 94 [] [] request.CRITICAL: Exception thrown when handling an exception (Doctrine\ODM\MongoDB\Mapping\MappingException: No identifier/primary key specified for Document 'Project\MyBundle\Document\Visitor'. Every Document must have an identifier/primary key.) [] []
О том, что HipHop VP не поддерживает аннотации было известно, но попытаться было решено по следующим причинам:
- Известно, что Symfony2 при очистке кэша его же и подогревает. Очищается кэш из консоли без обращения к HipHop VM обычным PHP 5. Т.е. была надежда на то, что Symfony2 при очистке кэша закэширует все аннотации и при обращении к app.php возьмёт их из файлов кэша, подготовленных PHP 5.
- А вдруг.
К сожалению, надежды не оправдались. Возможно, с будущими релизами ситуация изменится.
6. Тесты
Раз уж так вышло, что HipHop VM взлетел, но без Symfony2 на борту, было проведено небольшое тестирование. Скрипт и параметры нагрузки взяты из топика трёхлетней давности, посвящённого HipHop-PHP. Условия проведения и объекты тестирования, конечно, отличаются, но всё же, любопытства ради…
<?php for($i = 0; $i < 1000; $i++) { echo var_dump($_SERVER); }
Возможность влияния БД, на которую часто ссылаются разработчики HipHop VM, исключена. Обращения будут выполняться через Nginx для большей приближенности к реальности:
ab -n 1000 -c 5 http://www.mysymfony2site.com/test.php
HipHop VM
Concurrency Level: 5 Time taken for tests: 24.912 seconds Complete requests: 1000 Failed requests: 97 (Connect: 0, Receive: 0, Length: 97, Exceptions: 0) Write errors: 0 Total transferred: 1588072000 bytes HTML transferred: 1587891000 bytes Requests per second: 40.14 [#/sec] (mean) Time per request: 124.558 [ms] (mean) Time per request: 24.912 [ms] (mean, across all concurrent requests) Transfer rate: 62254.02 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.3 0 7 Processing: 44 124 26.9 120 268 Waiting: 38 103 23.5 101 231 Total: 44 124 26.9 120 268
PHP5-FPM+APC
Concurrency Level: 5 Time taken for tests: 387.404 seconds Complete requests: 1000 Failed requests: 85 (Connect: 0, Receive: 0, Length: 85, Exceptions: 0) Write errors: 0 Total transferred: 4263063000 bytes HTML transferred: 4262907000 bytes Requests per second: 2.58 [#/sec] (mean) Time per request: 1937.018 [ms] (mean) Time per request: 387.404 [ms] (mean, across all concurrent requests) Transfer rate: 10746.28 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.5 0 10 Processing: 1163 1936 214.5 1865 3365 Waiting: 1 11 63.6 3 1371 Total: 1163 1936 214.6 1865 3365
7. Выводы
Смотрим результаты тестов, делаем выводы.
8. Заключение
Всем спасибо, удачи с прикручиванием HipHop VM к вашим проектам.
ссылка на оригинал статьи http://habrahabr.ru/post/189960/
Добавить комментарий