Como configurar o HHVM no Ubuntu VPS?
Meu VPS inicial (Virtual Private Server) tinha apenas 512M de RAM, 1 núcleo e 10G HDD. Mais tarde, atualizei para 2 núcleos, 1G RAM e 20G HDD devido a um incidente de falta de memória. No entanto, há alguns dias, o tráfego cresce (a maioria deles são de bots ), o VPS mal dava conta e por isso atualizei novamente para 3 núcleos e 2 GB de RAM.
A versão do PHP no VPS é 5.5 e, portanto, possui um acelerador embutido, OpCache, que armazena em cache o opcode do PHP. O Opcache é introduzido para substituir o APC (Another PHP Cache), que é um projeto de código aberto usado principalmente para acelerar o código PHP antes da versão 5.4.x ou versões anteriores. O HHVM funciona de maneira semelhante. Ele compila o código PHP em assembly na primeira vez e, em seguida, o código assembly, se encontrado e ainda válido, será executado sem reinterpretar o mesmo código PHP. Essa ideia é muito parecida com a plataforma .NET onde as linguagens .NET como C# são traduzidas e compiladas para código nativo em tempo de execução (JIT = Just In Time) compilador. É por isso que os aplicativos .NET são lentos no início, mas tendem a acelerar mais tarde porque são compilados em tempo de execução para código nativo e armazenados em cache.
Claro, existem outras novidades. A nova linguagem [Hack] é baseada em PHP. Sabemos que a linguagem PHP é uma linguagem de tipo flexível, o que significa que você não precisa especificar um tipo (na verdade, não há maneiras de fazer isso explicitamente) para nenhuma variável. Os tipos são usados quando necessário. A linguagem Hack é uma linguagem de tipo gradual, o que significa que na primeira vez que você define um tipo, o tipo não pode ser alterado. Isso ajuda a promover um código robusto e melhora a eficiência do desenvolvimento. Este é um grande tópico que deve ser introduzido em um post separado.
A instalação do HHVM no Linux (no meu caso, Ubuntu) é bastante simples.
root@uploadbeta:/var/www/helloacm.com/htdocs/hhvm# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty
Você pode baixar os binários pré-compilados ou o código-fonte e compilá-lo localmente. O seguinte é instalado a partir de um repositório binário pré-compilado.
wget -O -
Você então pode executar o seguinte comando para configurar o servidor apache ou ngix.
/usr/share/hhvm/install_fastcgi.sh
Na verdade, depois de instalar o hhvm, você pode usá-lo na linha de comando para executar o código-fonte do PHP, assim:
hhvm hello-world.php
Parâmetros de linha de comando HHVM
Podemos desativar temporariamente o servidor Apache:
sudo service apache2 stop
E execute o servidor hhvm, escutando na porta 80 (assim você tem que parar outros servidores que escutam na mesma porta):
hhvm -m server
E então você pode testar o código PHP no navegador, que é passado para o servidor HHVM.
Se ocorrer um erro 404 não encontrado após a instalação e configuração, você provavelmente precisará adicionar a seguinte linha ao /etc/hhvm/server.ini
hhvm.server.fix_path_info = true
E reinicie o hhvm usando sudo service hhvm restart.
Eu testei e monitorei o servidor por um tempo e para ser honesto não vi nenhuma diferença provavelmente por causa do tráfego imperceptível. No entanto, os processos listados pelo comando htop mudaram de apache2 -k start para hhvm
Também podemos criar um arquivo PHP que tenha o seguinte conteúdo e testar se o HHVM está funcionando no navegador:
Os sites wordpress são executáveis usando HHVM, mas o HHVM parece não suportar a codificação GB2312 (e talvez outros também) porque atrapalha os caracteres. O código PHP da galeria de fotos mostrou uma página em branco usando HHVM e ainda não descobri a causa.
Ainda decidi me livrar do HHVM, o pacote atual: Apache2 + PHP5.5 + Mysql funciona muito bem. Talvez eu traga o HHVM de volta no futuro se o VPS experimentar um tráfego enorme novamente.
sudo service hhvm stop
sudo apt-get remove hhvm
Precisamos restaurar as configurações do apache2 após a desinstalação do HHVM.
sudo a2dismod proxy_fcgi
sudo a2dismod proxy
rm /etc/apache2/mods-enable/hhvm*.conf
sudo service apache2 restart