Após uma discussão feita AQUI sobre como PHP-FPM
consumir memória, acabei de encontrar um problema ao ler a memória em top
comando. Aqui está uma captura de tela do meu top
logo após reiniciar PHP-FPM
. Tudo é normal: cerca de 20 PHP-FPM
processos, cada um consumindo 5,5 MB de memória (0,3% do total).
Aqui está o servidor antigo logo antes da reinicialização de PHP-FPM
(um dia após a reinicialização anterior). Aqui, ainda temos cerca de 25 PHP-FPM
com uso de memória dupla (10 MB indicando 0,5% do total). Portanto, a memória total usada deve ser de 600 a 700 MB. Então, por que 1,6 GB de memória foi usada?
free
são idênticos.Respostas:
TL; DR 1
Seu servidor está dentro de algum tipo de contêiner virtuozzo / openvz / virtualization-du-jour . Tentar entender o uso da memória está inclinado nos moinhos de vento.
TL; DR 2
Linux comeu sua RAM! Mas tudo bem, isso faz com todos.
A Longa História
Vamos dividir!
Na
Mem:
seção, temos:$n total
: a quantidade de RAM física em sua máquina$n used
: quanta memória está sendo consumida pelo Linux, não apenas a soma dos processos.$n free
: Quanta RAM não está sendo consumida pelo Linux. Isso não leva em consideração que a memória armazenada em cache e em buffer é essencialmente "livre".$n buffers
: espaço no buffer é onde os blocos de E / S do disco que foram lidos ou aguardando uma gravação são armazenados. Um buffer é uma representação de RAM de um único bloco de disco.Na
Swap:
seção, temos:$n total
: Auto-explicativo. Quantidade de espaço em disco disponível para troca de páginas.$n used
: Auto-explicativo. Quanto espaço de troca de disco é usado.$n free
: Herp Derp.$n cache
: Intimamente relacionado aos buffers acima. Na verdade, faz parte do cache da página e não possui espaço no disco físico. Não se preocupe com os detalhes desta conversa.A parte interessante vem quando você corre
free -m
. Você verá três linhas e todos os números se correlacionarão com o topo. Vou dar meu próprio PC como exemplo:A linha Mem mostra a RAM total em megabytes (
$n total
na parte superior), quanto é usado ($n used
na parte superior), quanto é gratuito ($n free
na parte superior), quanto é compartilhado (ignore isso) e agora vem a parte boa! As colunasbuffers
e estão correlacionadas a, previsivelmente, e . Mas dê uma olhada na segunda linha que começa com isso . A matemática mostra que a quantidade usada é realmente (total) - ((buffers usados) - armazenada em cache). Livre é (total) - (theNewUsed).cached
free -m
$n buffers
$n cache
free -m
-/+ buffers/cache:
O que tudo isso significa? Isso significa que o Linux comeu sua RAM! A história resumida é que o kernel do Linux consome RAM, pois está disponível para uso em cache de disco. Não há nada que você possa fazer a menos que queira compilar um kernel personalizado. Dica profissional: não.
A RAM está realmente lá e livre para os processos usarem à vontade. É isso que significa a
-/+ buffers/cache:
linhafree -m
. No entanto, você está dentro de um contêiner de virtualização sem viseira, o que torna as coisas um pouco estranhas. Você simplesmente não pode fazer um balanço da sua memória com precisão de bytes neste momento. No entanto, você não está vendo nenhum comportamento terrivelmente incomum.Mantenha a calma e continue. Além disso, obtenha um servidor físico (a menos que você goste de estatísticas de memória que se parecem com o Kreskin é o seu SysAdmin).
fonte
A parte superior não é a melhor maneira de verificar o uso da memória. No entanto, como minha pergunta foi marcada como duplicada, vou postar minha resolução aqui.
Eu li em um fórum que o ps_mem.py verificará o uso de memória para você.
Repositório: https://github.com/pixelb/ps_mem/
Baixar:
Uso:
Saída:
fonte