O gerenciamento de memória linux basicamente tenta empregar toda a memória possível. O espaço "livre" é continuamente usado como caches de buffer na tentativa de ser eficiente. Isso aumenta com o tempo, mas como o novo processo precisa de mais memória e como o pool livre diminui, o gerenciador de memória retornará o cache do buffer conforme necessário. Assim, você vê, talvez, uma fração da memória sendo liberada quando você encerra alguns processos. No entanto, esse armazenamento em cache do buffer não leva a uma condição de falta de memória.
Pergunta: você está usando uma versão linux de 32 ou 64 bits? Se você estiver usando uma versão de 32 bits, então é possível que um dos processos apache do mysql colidiu com o limite de memória de processo de 2GB e, portanto, esteja sem memória. Este é apenas um palpite no entanto.
Você está executando outras coisas além do apache e do mysql que podem estar tomando memória. Alguns aplicativos java mal codificados também têm sido leakers. Não está claro novamente que qualquer um dos seus outros processos pode estar causando um problema de memória.
Alguma investigação no sistema, mistura de processos, parâmetros de configuração do mysql podem estar em ordem.
BTW, eu entendo que você pode liberar o cache do buffer usando o seguinte comando (como root):
sync; echo 3 > /proc/sys/vm/drop_caches
No entanto, isso não é algo que eu recomendo que você faça em uma situação de produção, mas pode ser interessante em um ambiente de teste ou de referência.
Espero que isso ajude.