Obter o uso da memória através do ps não é confiável. Se você possui um kernel mais recente, ele deve suportar / proc / pid # / smaps, o que fornece informações detalhadas sobre o uso de memória de cada processo. Abaixo está um script bastante sujo e rápido para percorrer cada processo que está aberto e pegar o tamanho, rss, pss e uso compartilhado de limpeza / sujeira. Espero que possa ser útil de alguma forma.
#!/bin/bash
for pid in $(ps -ef | awk '{print $2}'); do
if [ -f /proc/$pid/smaps ]; then
echo "* Mem usage for PID $pid"
echo "-- Size:"
cat /proc/$pid/smaps | grep -m 1 -e ^Size: | awk '{print $2}'
echo "-- Rss:"
cat /proc/$pid/smaps | grep -m 1 -e ^Rss: | awk '{print $2}'
echo "-- Pss:"
cat /proc/$pid/smaps | grep -m 1 -e ^Pss: | awk '{print $2}'
echo "Shared Clean"
cat /proc/$pid/smaps | grep -m 1 -e '^Shared_Clean:' | awk '{print $2}'
echo "Shared Dirty"
cat /proc/$pid/smaps | grep -m 1 -e '^Shared Dirty:' | awk '{print $2}'
fi
done
ps ef -o command,vsize,rss,%mem,size
Não consegui encontrar uma opção para memória compartilhada, mas encontrei opções para% da memória física total e a quantidade de espaço de troca necessária para trocar o processo. Isso e muito mais está documentado na página de manual do ps.
fonte
top
,ps
E programas similares são todos afetados por este da mesma forma.A resposta do @ user26528 não calcula a memória corretamente - você precisa da soma dos mapeamentos nos smaps, não apenas do topo. Este script deve fazer isso:
fonte
Listar processos por uso de memória
fonte
ps -e -orss=,pid=,args= | sort -b -k1,1n
para incluir o ID do processops
pode classificar por conta própria:ps -eo rss=,args= --sort +rss
você pode usar
fonte
Listar processos por uso de mem
comando: ps -e -orss =, args = | classifique -b -k1,1n | pr -TW $ COLUMNS \
fonte
Atualizar:
A seguinte linha única também fornece informações sobre o consumo total de memória pelo usuário atual.
Acabei de listar todos os processos do usuário classificados pelo maior uso de memória em MB, como este:
Você pode usar em
command=
vez decomm=
para mostrar o processo do caminho completo.O
=
apenas remove o título da coluna.fonte
Descobri que muitas vezes o mesmo processo tem um subprocesso fork e você está interessado na memória total usada pelo processo. por exemplo, o google chrome inicia vários processos e você deseja conhecer a memória total obtida pelo chrome. Encontrei abaixo de um comando de linha muito útil
Ele cuida de muitas coisas, como mostrar memória em MB, classificar na memória e principalmente agrupar por comando. Também está agrupando% de CPU e% de memória. Está mostrando dados em formato amigável.
Esse comando foi inspirado nesta resposta e me ajudou muito a ter uma ideia de qual processo está consumindo meus recursos.
fonte