Nada a ver com o que você forneceu de informações. Seu free -m
apenas mostra que você usou apenas metade da sua memória. Você verificou seus logs do HHVM e do nginx para ver se esse é o problema real?
Você poderia fazer um pequeno script como esse que pegará a saída do ps aux e o anexará a um arquivo a cada 30 segundos (ou mais). Deixe-o rodar em segundo plano em um período e analise a saída da memória depois. Várias ferramentas UNIX podem ser usadas no arquivo com a saída posteriormente para ótimas oportunidades de análise.
O script pode ter esta aparência:
while [ true ]
do
printf "\n\n" >> /root/psaux_analysis
echo "--------------------------------------" >> /root/psaux_analysis
date >> /root/psaux_analysis
echo "--------------------------------------" >> /root/psaux_analysis
printf "\n" >> /root/psaux_analysis
ps aux >> /root/psaux_analysis
sleep 30;
done
Isso fornecerá uma saída semelhante à seguinte:
--------------------------------------
Mon Jun 16 07:44:03 UTC 2014
--------------------------------------
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2028 584 ? Ss Mar12 1:08 init [2]
root 2 0.0 0.0 0 0 ? S Mar12 0:00 [kthreadd/146]
root 3 0.0 0.0 0 0 ? S Mar12 0:00 [khelper/146]
daemon 313 0.0 0.0 1804 512 ? Ss Mar12 0:00 /sbin/portmap
daemon 528 0.0 0.0 2156 304 ? Ss Mar12 0:00 /usr/sbin/atd
104 551 0.0 0.0 2580 240 ? Ss Mar12 0:00 /usr/bin/dbus-daemon --system
root 560 0.0 0.0 2288 732 ? Ss Mar12 0:28 /usr/sbin/cron
root 727 0.0 0.0 29576 4128 ? Sl Mar12 38:12 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock
...