Porque você interpreta 'memória usada' da maneira errada. No Linux unused memory = bad memory
, o Linux tenta usar todas as memórias disponíveis, se possível. Um exemplo é o armazenamento em cache. Essa memória pode ser liberada a qualquer momento, assim que um aplicativo precisar dela.
Você pode liberar esses conteúdos em cache manualmente:
# free
total used free shared buffers cached
Mem: 1022560 470596 551964 0 27872 189784
-/+ buffers/cache: 252940 769620
Swap: 6587388 0 6587388
# sync
# echo 3 > /proc/sys/vm/drop_caches
# free
total used free shared buffers cached
Mem: 1022560 300952 721608 0 972 53216
-/+ buffers/cache: 246764 775796
Swap: 6587388 0 6587388