Eu tenho um servidor com 12G de memória. Um fragmento da parte superior é mostrado abaixo:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12979 frank 20 0 206m 21m 12m S 11 0.2 26667:24 krfb
13 root 15 -5 0 0 0 S 1 0.0 36:25.04 ksoftirqd/3
59 root 15 -5 0 0 0 S 0 0.0 4:53.00 ata/2
2155 root 20 0 662m 37m 8364 S 0 0.3 338:10.25 Xorg
4560 frank 20 0 8672 1300 852 R 0 0.0 0:00.03 top
12981 frank 20 0 987m 27m 15m S 0 0.2 45:10.82 amarok
24908 frank 20 0 16648 708 548 S 0 0.0 2:08.84 wrapper
1 root 20 0 8072 608 572 S 0 0.0 0:47.36 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
O free -m
mostra o seguinte:
total used free shared buffers cached
Mem: 12038 11676 362 0 599 9745
-/+ buffers/cache: 1331 10706
Swap: 2204 257 1946
Se bem entendi, o sistema possui apenas 362 MB de memória disponível. Minha pergunta é: como descobrir qual processo está consumindo a maior parte da memória?
Assim como informações de segundo plano, o sistema está em execução 64bit OpenSuse 12
.
Respostas:
Primeiro, repita esse mantra por um tempo: "memória não utilizada é memória desperdiçada". O kernel do Linux mantém enormes quantidades de metadados e arquivos solicitados, até que algo que pareça mais importante elimine esses dados. É por isso que você pode executar:
e fazer com que a segunda
find
instância corra a uma velocidade ridícula.O Linux deixa apenas um pouco de memória "livre" para lidar com picos no uso da memória sem muito esforço.
Segundo, você deseja encontrar os processos que estão consumindo toda a sua memória; no
top
uso doM
comando para ordenar por uso de memória. Sinta-se à vontade para ignorar aVIRT
coluna, que apenas informa a quantidade de memória virtual que foi alocada, e não a quantidade de memória que o processo está usando.RES
relata quanta memória está residente ou atualmente em ram (em vez de trocada para disco ou nunca realmente alocada em primeiro lugar, apesar de ser solicitada).Mas, como
RES
contará, por exemplo,/lib/libc.so.6
memória uma vez para quase todos os processos, não é exatamente uma medida impressionante da quantidade de memória que um processo está usando. ASHR
coluna relata quanta memória é compartilhada com outros processos, mas não há garantia de que outro processo esteja realmente compartilhando - pode ser compartilhável, mas ninguém mais deseja compartilhar.A
smem
ferramenta foi projetada para ajudar os usuários a avaliar melhor quanta memória deve realmente ser atribuída a cada processo individual. Faz algum trabalho inteligente para descobrir o que é realmente único, o que é compartilhado e calcula proporcionalmente a memória compartilhada com os processos que a compartilham.smem
pode ajudar você a entender onde sua memória está indo melhor do que atop
vontade, mastop
é uma excelente primeira ferramenta.fonte
/proc/meminfo
e/proc/slabinfo
detalham para que o kernel está usando o armazenamento - oslabtop
programa é muito parecidotop
, mas mostra para quais alocadores de laje alocaram quanto, quais são suas proporções etc.use dica rápida usando o comando top no linux / unix
e depois pressione Shift+ m(ou seja, escreva uma capital
M
).De
man top
Ou, alternativamente: pressione Shift+ f, depois escolha a tela para ordenar pelo uso da memória, pressionando a tecla ne pressione Enter. Você verá o processo ativo ordenado pelo uso da memória
fonte
M
(Shift
+m
)top -o mem -O cpu
top -o RES
"nome do campo não reconhecido 'mem'"(Adicionando sinalizador numérico -n ao comando de classificação.)
fonte
ps aux --sort '%mem'
que foi explicado na minha respostaPrimeiro você deve ler uma explicação sobre a saída de
free
. Conclusão: você tem pelo menos 10,7 GB de memória prontamente utilizável pelos processos.Então você deve definir o que é "uso de memória" para um processo (não é fácil ou inequívoco, acredite em mim).
Talvez possamos ajudar mais :-)
fonte
Listar e classificar processos por uso de memória:
fonte
ps -e -orss=,args= | sort -nr | head
ps aux --sort '%mem'
ps do procps (padrão no Ubuntu 12.04) gera saída como:
Então, aqui o Firefox é o principal consumidor com 16% da minha memória.
Você também pode estar interessado em:
fonte
você pode especificar em qual coluna classificar, com as seguintes etapas:
fonte
Você pode ver o uso da memória executando este código no seu terminal:
fonte
Como totalizar a memória usada pelo nome do processo:
Às vezes, mesmo observando os maiores processos isolados, ainda há muita memória usada inexplicada. Para verificar se existem muitos dos mesmos processos menores usando a memória, você pode usar um comando como o seguinte, que usa o awk para resumir a memória total usada por processos com o mesmo nome:
por exemplo, saída
fonte
Este mesmo segundo no tempo
Atualizando continuamente
Também adicionei algumas guloseimas aqui que você pode apreciar (ou ignorar)
-n 1
assistir e atualizar a cada segundo-U $(whoami)
Para mostrar apenas seus processos. $ (algum comando) avalia agora| head -n4
Para mostrar apenas o cabeçalho e três processos por vez, geralmente, você só precisa de itens de linha de alto uso${1-4}
diz meu primeiro argumento,$1
eu quero usar como padrão 4, a menos que eu forneçaSe você estiver usando um mac, talvez seja necessário instalar o watch primeiro
Como alternativa, você pode usar uma função
fonte
-m
para-r
Você tem este comando simples:
fonte