Acho que você está entendendo mal o modo como o Linux relata o uso da memória. Quando um processo se bifurca, resulta em um segundo processo que compartilha muitos recursos com o processo original. Incluído nisso está a memória. No entanto, o Linux usa uma técnica conhecida como Copy On Write (COW) para isso. O que isso significa é que cada processo filho bifurcado verá os mesmos dados na memória que o processo original, mas sempre que esses dados forem alterados (pelo filho ou pai), as alterações serão copiadas e só então apontarão para um novo local.
Até que um dos processos faça alterações nesses dados, eles compartilham a mesma cópia. Como resultado, eu poderia ter um processo que usa 100MB de RAM e bifurcar 10 vezes. Cada um desses processos bifurcados mostraria 100MB de RAM sendo usados, mas se você observasse o uso geral da memória na caixa, isso poderia mostrar apenas 130MB de RAM (100MB compartilhados entre os processos, além de alguns MB de sobrecarga , mais outra dúzia de MB ou dois para o resto do sistema).
Como último exemplo, tenho uma caixa agora com 30 processos apache em execução. Cada processo está mostrando um uso de 22MB de RAM. No entanto, quando executo free -m para mostrar meu uso geral de RAM, recebo:
topher@crucible:/tmp$ free -m
total used free shared buffers cached
Mem: 349 310 39 0 24 73
-/+ buffers/cache: 212 136
Swap: 511 51 460
Como você pode ver, esta caixa não tem RAM suficiente para rodar 30 processos, cada um usando 18MB de RAM "real". A menos que você esteja literalmente ficando sem RAM ou seus aplicativos estejam trocando muito, eu não me preocuparia com as coisas.
UPDATE: Além disso, confira esta ferramenta chamada smem , mencionada por jldugger na resposta a outra pergunta sobre o uso da memória do Linux aqui .