Isso não é um problema, Linux deveria fazer isso. Se você estava realmente tendo problemas de memória, você notaria que tudo estava correndo devagar e os processos seriam mortos pelo assassino da OOM .
O kernel do Linux aproveita a RAM não utilizada para o armazenamento em cache de disco. Isso é uma coisa boa, faz tudo correr mais rápido. Essa memória ainda está disponível para qualquer programa que precise dela, ela será usada apenas para armazenamento em cache se não for necessária em outro lugar. É por isso que free
mostra buffers/cache
separadamente, você deve considerá-los como memória livre.
A quantidade real de memória disponível para o seu sistema é free
+ buffers
+ cache
, no exemplo em que você postou que é 170036 + 146228 + 1207360 = 1523624
, isso é ~ 1.5G de memória livre.
Isso é explicado muito bem na Documentação RedHat :
In this example the total amount of available memory is 4040360 KB. 264224 KB are used by processes and 3776136 KB are free for other applications. Do not get confused by the first line which shows that 28160KB are free! If you look at the usage figures you can see that most of the memory use is for buffers and cache. Linux always tries to use RAM to speed up disk operations by using available memory for buffers (file system metadata) and cache (pages with actual contents of files or block devices). This helps the system to run faster because disk information is already in memory which saves I/O operations. If space is needed by programs or applications like Oracle, then Linux will free up the buffers and cache to yield memory for the applications. If your system runs for a while you will usually see a small number under the field "free" on the first line.
Para mais informações, consulte aqui: