Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

HipHop VM: разведка боем под Debian 7 Nginx Symfony2

Anna | 31.05.2014 | нет комментариев

Последнее время много «шума» вокруг HipHop VM и kPHP: всякий общественный великан своё детище хвалит. Огромнее каждого волновала связка, указанная в заголовке. О kPHP что-то говорить ещё рано, правда теснее предварительно вестимо, что ООП не поддерживается. А вот HipHop VM теснее дозволено пощупать. Кто-то об этом звере слышал, некоторые пытались устанавливать, некоторым это получалось.

В топике описывается процедура установки HipHop VM из начальных кодов под Debian 7. Допустимо, кому-то данный топик сэкономит время, нервы и поможет перешагнуть грабли, по которым прошлись мы.

  1. Данные тест-драйва
  2. Компиляция
  3. Конфигурация и запуск
  4. Настройка Nginx
  5. Сушите вёсла, приплыли
  6. Тесты
  7. Итоги
  8. Завершение

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 — пожалуйста, отпишитесь в комментариях).

Скачиваем с GitHub начальный код HipHop VM, выставляем переменные окружения и устанавливаем надобные пакеты:

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 патчем от HipHop VM:

# 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 падает с оплошностью.

Запускаем утилиту 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

Через несколько минут компиляция падает приблизительно с такой оплошностью:

[ 46%] Building CXX object hphp/CMakeFiles/hphp_runtime_static.dir/runtime/vm/bytecode.cpp.o c : internal compiler error: Killed (program cc1plus)

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 приблизительно дальнейшего оглавления:

/opt/dev/hiphop-php/config.hdf

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…

request.CRITICAL: DoctrineODMMongoDBMappingMappingException: No identifier/primary key specified for Document 'ProjectMyBundleDocumentVisitor'. 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 (DoctrineODMMongoDBMappingMappingException: No identifier/primary key specified for Document 'ProjectMyBundleDocumentVisitor'. 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. Данные проведения и объекты тестирования, безусловно, отличаются, но всё же, любопытства ради…

test.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 к вашим планам.

Ваше отношение к HipHop VM

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Проголосовало 14 человек. Воздержалось 5 человек.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB