Erro de memória insuficiente da JVM e a troca

Conforme eu desenvolvo em Scala / Play / Mongo, fico confortável em manter meu próprio servidor. Há cerca de um mês, obtive um pequeno VPS (2 GB de RAM) da DigitalOcean e o preparei como meu ambiente host, instalando os seguintes pacotes como de costume:

  • Git
  • Nginx (como servidor front-end)
  • Virtualmin
    • DNS
    • Servidor de Email
    • Apache
    • MySQL
    • RoundCube (como webmail)
  • MongoDB
  • OpenJDK 7

Como você pode imaginar, eles precisariam de uma quantidade razoável de RAM.

Eu também tenho um script de publicação em minha máquina local que compila o código-fonte (usando stage), envia por push para o repositório especial no servidor de implantação (usando git) e reinicia o servidor embutido do aplicativo Play (usando ssh).

Implantei vários aplicativos da mesma forma com sucesso, mas desta vez tive um problema. Havia três aplicativos do Play em execução neste servidor. O problema é que os aplicativos param de rodar de vez em quando com um hs_err_pid*.logarquivo que indica que a memória é insuficiente! Pior do que isso, o servidor da Web do Play não era iniciado após a publicação.

Hoje, descobri acidentalmente que a troca de servidor é zero. Este foi o principal motivo do erro de memória insuficiente. Depois de adicionar o arquivo de troca, o servidor e os aplicativos da web estão funcionando perfeitamente.

Não preciso que todos os processos em execução sejam extremamente rápidos. Além disso, quanto mais o processo é usado, mais prioridade ele recebe.

Conclusão

Sempre verifique a troca de servidor antes de qualquer outra ação em seu VPS.