Eu preciso exibir na GUI para a memória usada pelo operador vs disponível no Linux Server
Então, qual seria o valor logicamente correto para exibir como uso?
[root@host ~]# free
total used free shared buff/cache available
Mem: 131753676 110324960 1433296 4182648 19995420 16240640
Swap: 2097148 652076 1445072
used
ou ( total
- available
)?
A diferença é: 110324960 vs 115513036 ou 5188076 kb ~= ~5 GB Então o que há com esses 5 GB eles são efetivamente usados ou disponíveis ou indisponíveis e nem usados? O que é mais correto exibir para usado no uso de memória %?
Isto é para CentOS 7.3 PC, executando 2 serviços java
Mas há uma imagem totalmente diferente no PostgreSQL Server
[root@postgres_server1 ~]# free
total used free shared buff/cache available
Mem: 131753684 7364056 77736740 15598120 46652888 107942020
Swap: 2097148 0 2097148
onde a diferença entre used
e ( total
- available
) é muito maior: 16447608 kb ~=15,7 GB
Depende do que seu uso deve refletir. Na
free
saída de:“Total – disponível” significaria algo como “memória física atualmente em uso e não substituível”. A diferença entre isso e “usado”, os 5 GB e 15 GB que você mencionou, é a quantidade de memória física atualmente armazenando dados que ainda não estão disponíveis em outro lugar, ou seja , buffers sujos (portanto, seu PostgreSQL tem mais dados esperando para atingir o disco). “Disponível” reflete a quantidade máxima de memória física que um programa pode solicitar sem ser forçado a trocar (embora nada garanta que, se um programa usar tanta memória, ele não trocaria de qualquer maneira, dado o resto do comportamento do sistema em A Hora).
Portanto, seus dois valores refletem a memória usada, com definições ligeiramente diferentes. Qual deles você usa é com você (ou suas necessidades). "Disponível" é mais preciso do que "usado", então provavelmente é um valor mais útil se você quiser manter apenas um.
Outra maneira de pensar sobre isso é considerar quais perguntas os valores respondem:
Não há compromisso perfeito, e é por isso que
free
mostra os dois valores.Memória imediatamente disponível no sistema de gerenciamento de memória linux e Como posso obter a quantidade de memória disponível de forma portátil nas distribuições? fornecer mais detalhes sobre o significado exato de “disponível”. Não é equivalente a “buff/cache” porque este último inclui memória que não é recuperável (porque ainda não foi gravada em disco), e há outros pools de memória que são recuperáveis, mas não são contados em “ buff/cache”.
Além da resposta existente:
Esta pergunta "simples" toca um tópico muito importante: gerenciamento de memória. Este é mesmo o principal "subsistema" do kernel. "Compre mais RAM" ainda é universalmente verdade. Mas não importa o quanto você tenha: todo sistema operacional precisa lidar com o caso em que o compartilhamento de RAM se transforma em congestionamento, em troca, em thrashing.
Há uma linha tênue entre o uso eficiente e a falta de recursos. Passei pelos seus números e tenho esta interpretação:
Java:
"usado" mostra 83% do "total". Isso é alto. E a troca está ativa; muito pequeno, e ainda com espaço livre.
"livre" mostra o problema. Menos de 1%. Onde estão os 16%? É o chamado "disponível", 16 GB aqui, que é cerca de 16%.
"compartilhado" (4G) mais "buff/cache" (19G) são um pouco mais do que esses 16G "disponíveis" - refletindo que o kernel poderia "sacrificar" dois terços dele. Mas do jeito que o java está rodando no sistema agora, é assim que acontece.
Portanto, este sexto ausente, o x = total - (usado+livre) (132G - (110+1)), está aqui 21G, que está entre "avail" (16G) e "sh" + "b/c" (23G juntos).
Você tem que ler
free
da esquerda para a direita, primeiro marque "swap", e depois pergunte COMO é usado: como "compartilhado" e/ou "buff/cache", e quanto disso está "disponível".A ativação da troca e "grátis" abaixo de 1% mostra a luz vermelha, mas 16% disponível e os detalhes da troca mostram que está "ok".
(Acho que a troca é muito pequena para 132G; espero que o serviço java também esteja fazendo algo)
Exemplo SQL:
Isso mostra como "deveria" ser: RAM suficiente e um aplicativo e sistema operacional trabalhando juntos:
Apenas 5% são usados. Mas 50% não são gratuitos. Eles são usados como "compartilhados" e reservados como "buff/cache". A troca não está ativa. Novamente, você não pode obter todo o 61G, mas uma grande parte dele.
Não adianta definir novas palavras - é uma questão de interpretação. No final, é o kernel quem sabe e
free
é perfeito para a visão geral de nível superior. Você tem que perguntar ao "operador" o que ele quer, agora com essa informação, ou talvez agora você até saiba sem perguntar.