Como exibir o uso resumido da memória de grupos de comandos (em vez de processos)

10

Existe uma maneira de agrupar processos semelhantes ao usar ferramentas como top / htop? Às vezes, eu só quero saber o que está consumindo minha memória e alguns programas (principalmente os navegadores) estão usando vários processos, o que dificulta a leitura da quantidade de RAM que eles realmente usam.

Até agora, eu vim apenas com algo assim:

ps ax -o pmem,cmd | grep opera | grep -oE '^[ ]*[0-9.]+' | paste -sd+ - | bc
korda
fonte

Respostas:

7

Você pode usar ps -Cpara exibir apenas informações do processo para um nome de comando específico.

por exemplo

ps -C opera

Você pode usar outras psopções para extrair apenas os dados que está procurando. Em particular, hou --no-headerspara suprimir os cabeçalhos das colunas e -o pmemmostrar a porcentagem de memória usada pelo processo.

ps -C opera --no-headers -o pmem

Isso fornecerá várias porcentagens de uso de memória, uma por linha.

Existem inúmeros métodos para somar dados como esse, um dos métodos que eu uso com freqüência é canalizá-los para xargs para convertê-los em uma linha com elementos delimitados por espaços, depois em sed para converter espaços em +símbolos e depois bcexecutar o Cálculo. Seu método de canalizar paste -sd+funciona tão bem ou sem dúvida melhor que | xargs | sed.

Juntando tudo isso, você obtém:

ps -C opera --no-headers -o pmem | xargs | sed -e 's/ /+/g' | bc

ou

ps -C opera --no-headers -o pmem | paste -sd+ | bc

Em outras palavras, você pode usar em ps -Cvez de vários greps se quiser apenas dados sobre um programa em execução específico.

NOTA: Você pode usar várias -Copções na mesma linha de comando se desejar obter informações sobre mais de um programa por vez. por exemplo

ps -C iceweasel -C chromium -C opera
cas
fonte
Yay, primeira pessoa que realmente entendeu / leu minha pergunta!
22415
O único problema que vejo com essa abordagem é que alguns programas têm o mesmo comando e, no entanto, eu não gostaria de agrupá-los (por exemplo, java ... e, como sou desenvolvedor de java, normalmente tenho pelo menos alguns programas java em execução). Eu acho que não existe uma solução perfeita ... #
22415
sempre há, ps h -C java -o pmem,args | awk '/foo/ {print $1}' | ...por exemplo, para procurar um programa java chamado foo.
cas
0

Você pode criar um script de shell

#!/bin/bash
Total=`cat /proc/meminfo | head -n1 | awk '{print $2}'`
max_usage=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $1}'`
name=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $NF}'`
echo "$Total $max_usage $name"
echo "($max_usage*$Total)/(100*1024)" | bc

Isso fornecerá o aplicativo de maior uso de mem.

RahulAN
fonte
Eu tentei fazer isso funcionar e não me deu resultados interessantes. Por exemplo ele mostra apenas um programa, e não é o único a tomar a maior parte da memória
korda
É isso? Bem, você quer algo como top ?? se sim, você pode modificar o script com atraso de 2 ou 1 s e executar a mesma coisa em algum tempo ou durante. Para mim, mostra o aplicativo de uso de memória mais alto no momento em que executo esse script. que tipo de coisa você está tentando, basta executar: ps af -o pmem, cmd | tipo -r Ele lhe dará a maior aplicação de uso mem
Rahulan
Não está funcionando para mim. Eu acho que a razão é que esse tipo inclui os principais espaços em branco #
22415
Quer dizer que você não está recebendo o nome correto do processo?
Rahulan
Sim, porque o ps adiciona espaços ao recuo. Quando um processo tem uso de 2 dígitos, os valores de uso de um dígito serão recuados e começarão com espaço à esquerda. Eu acho que adicionar algo como sed -e 's/^[[:space:]]*//'deveria corrigi-lo. Seu script também adiciona o uso de processos de memória com o mesmo comando?
22415
0

De dentro para cima, você pode usar o seguinte:

Press SHIFT+f
Press the Letter corresponding to %MEM
Press ENTER

Você também pode tentar:

ps -eo pmem,pcpu,vsize,pid,cmd | sort -k 1 -nr | head -5

Este comando fornecerá os 5 principais processos por uso de memória.

Espero que você ache essas informações úteis!

Paulo
fonte
0

Isso pode ser simplificado com termsql .

ps -C chromium-browser -o pmem | termsql -1 "SELECT SUM([%MEM]) FROM tbl"

Observe que, atualmente, ele não é carregado no PyPI e também pode ser instalado em todo o sistema ( setup.pyestá um pouco quebrado), como sudo pip install https://github.com/tobimensch/termsql/archive/master.zip.

saaj
fonte