A resposta curta à sua pergunta é o máximo possível , uma vez que fornece aos processos o que eles podem usar. A alternativa é deixar a memória livre, o que é um desperdício. Uma máquina com 16 GB não pode usar hoje 12 GB para poder usar 20 GB amanhã. Qualquer memória que não tenha sido usada neste segundo é um potencial para economizar E / S e outros esforços que estão perdidos para sempre - você não pode economizar memória para mais tarde.
Se você está pensando, "mas eu preciso da minha memória livre agora para que eu possa usá-lo mais tarde", limpe essa bobagem da sua mente. Você pode usá-lo agora e usá-lo mais tarde. Não há compensações para fazer aqui. De fato, se você está usando agora, você pode usá-lo mais tarde apenas por não fazer nada. Se você não está usando agora, você tem que trabalhar para usá-lo mais tarde. Então, usá-lo agora aumenta a probabilidade de você usá-lo mais tarde.
Você parece ter um equívoco de que a memória só pode ser usada por um processo ou pela sobrecarga do kernel. Isso não é verdade. Em um sistema típico, a grande maioria da memória física não é livre, usada por processos nem consumida pela sobrecarga do kernel.
Por exemplo, suponha que seu sistema tenha bastante memória livre e você execute top
e, em seguida, saia. Seu sistema tem duas escolhas. Ele pode manter o programa top
na RAM ou descartar as páginas que o continham. Vamos ver as duas opções:
Se deixar a RAM livre, isso exige esforço. E pior, é um esforço que precisa ser desfeito para usar a RAM. E se você executar top
novamente, o programa terá que ser carregado a partir do disco, o que é muito lento.
Se ele mantém as páginas na RAM e você executa top
novamente, não é necessário carregar o problema do disco. Essa é uma grande vitória. E se a memória for necessária para algum outro propósito, ela pode fazer a transição diretamente para esse propósito sem ter que se esforçar para tornar a memória usada e removê-la do pool livre.
Assim, as páginas da RAM permanecerão em uso, mantendo o executável. Esse uso não está associado a nenhum processo, pois top
não está em execução. Mas não é livre, pois contém dados que podem ser úteis. E não é uma sobrecarga - se a memória for mais útil fazendo outra coisa, o conteúdo pode ser descartado, pois o executável pode ser paginado a partir do disco, se necessário.
E, de fato, em um sistema típico sob carga típica, a grande maioria da memória contém informações que podem ser úteis no futuro, mas podem ser descartadas se a memória for necessária para outra finalidade.
Se você está olhando para /proc/meminfo
, o número para o qual você provavelmente deveria estar olhando é MemAvailable
. Isso combina memória livre e memória que contém informações que podem ser descartadas trivialmente se mais memória livre for necessária.