Ferramenta simples para representar graficamente o uso de memória?

14

Existe um script que mostre o uso da memória como um gráfico, por exemplo, como um gráfico de pizza, com cada processo sendo uma fatia separada?

Não estou procurando algo como Munin para representar graficamente o uso da memória ao longo do tempo, mas sim mostrar o uso da memória por processo em um único momento.

Para tornar minha solicitação ainda mais obscura, é para um servidor sem cabeça (portanto, não há aplicativos X). A maneira mais simples seria escrever um arquivo PNG, ou possivelmente um arquivo HTML (que poderia usar Javascript para permitir a filtragem de processos, alternando entre tipos de gráficos e assim por diante)

dbr
fonte

Respostas:

13

A contabilidade da memória por processo é complicada por várias razões em que entrarei em um minuto. Para um monitoramento simples, scripts gkrellmd ou nagios provavelmente são suficientes. Se você deseja maior precisão, precisará procurar mais.

A smem introduz o conceito de tamanho proporcional do conjunto :

Como grandes partes da memória física geralmente são compartilhadas entre vários aplicativos, a medida padrão do uso da memória, conhecida como RSS (tamanho do conjunto residente), superestima significativamente o uso da memória. O PSS mede o "compartilhamento justo" de cada aplicativo de cada área compartilhada para fornecer uma medida realista.

Exemplo: você inicia o GNOME, fazendo com que vários processos sejam iniciados, um para cada applet e programa. Todos eles estão vinculados ao libglib. O Linux carrega o libglib em um bloco de memória e o mapeia em todos os processos que desejam o libglib. A contabilidade de memória ingênua conta o tamanho total da libglib em todos os processos vinculados a ela.

O smem divide o custo do libglib entre os processos que o utilizam, para fornecer uma imagem mais próxima da realidade. Ele também possui várias opções para exibir o uso de memória (no site):

  1. Mostrar informações básicas do processo smem
  2. Mostrar visualização do sistema smem -R 4G -K / caminho / para / vmlinux -w
  3. Mostrar totais e porcentagens smem -t -p
  4. Mostrar colunas diferentes smem -c "name user pss"
  5. Mostrar processos filtrados pelo mapeamento smem -M libxml
  6. Mostrar mapeamentos filtrados pelo processo smem -m -P [e] volution
  7. Leia dados do capture tarball smem --source capture.tar.gz
  8. Mostrar um gráfico de barras marcado com a etiqueta pid smem --bar pid -c "pss uss"
  9. Mostre um gráfico circular do RSS rotulado pelo nome smem --pie name -s rss

Você precisará, no entanto, de um kernel muito recente (> 2.6.27).

jldugger
fonte
1
Sim, a sugestão de que o 2.6.27 é razoavelmente recente é bastante risível. As únicas distros que eu conheço que vêm com um kernel mais recente são o Fedora 10 e o Ubuntu 9.01.
Dave Cheney
9,04; O Ubuntu 8.10 é fornecido com o 2.6.27, mas o 2.6.30 está no rc3.
Jldugger #
Minhas desculpas, passei muito tempo em terras RHEL, onde 2.6.18 é considerado recente.
Dave Cheney
5

Não consigo pensar em nada da prateleira

no entanto, uma combinação de um script PHP executando ps -AH v | awk '{print $ 8, $ 9, $ 10}' e usá-lo com o pChart pode fornecer uma página da web que faria o que você está procurando? (uso em Kb, porcentagem do total e nome do processo)

Mark Regensberg
fonte
1
+1, pensei sobre isso com a API do Google Chart. :)
bom ponto. google chart api é provavelmente mais rápido para trabalhar com ...
Mark Regensberg
2

Dê uma olhada no sarface - isso depende dos dados do sar e você pode monitorar o uso da memória (e todos os outros dados do sar / sysstat) ao vivo.

Xerxes
fonte
1

e quanto a collectd ?

jnrg
fonte
1

Faça Você Mesmo. Faça um script de shell simples atualizando o banco de dados RRD. Em seguida, desenhe um gráfico usando rrdtool.


fonte
1

Se você realmente gosta de níveis mais baixos de detalhes, não se esqueça de colecionar. Aqui está um exemplo dos tipos de utilização de memória por processo que podem ser relatados:

RECORD 1 cag-dl585-02 (1244758290.002) (qui jun 11 18:11:30 2009)

RESUMO DO PROCESSO (os contadores são / s)
# Usuário PID S VmSize VmLck VmRSS VmData VmStk VmExe VmLib MajF Comando MinF
 9089 root S 66856K 0 2328K 1440K 212K 736K 6812K 0 0 sendmail:
 9097 smmsp S 57600K 0 1772K 1304K 204K 736K 5904K 0 0 sendmail:
 9108 raiz S 6428K 0 360K 180K 84K 88K 1944K 0 0 gpm
 9120 raiz S 74808K 0 1136K 476K 520K 48K 1920K 0 0 crond
 9173 xfs S 20904K 0 1828K 1124K 88K 104K 3084K 0 0 xfs

Se você estiver interessado em processos específicos, poderá especificar filtros apropriados (incluindo uma opção para mostrar threads).

E se você estiver interessado em memória em geral, ele também pode mostrar detalhes da laje e ainda possui uma saída no formato vmstat. Por que você deseja mostrar dados no formato vmstat quando a ferramenta existente já faz isso? Isso é fácil - coletivamente, você pode registrar estatísticas em um arquivo e reproduzi-lo posteriormente em vários formatos.

tente, você vai gostar

Jeff Atwood
fonte
1
  1. Grep o (s) processo (s).
  2. Analise a saída e salve no formato separado por vírgula em um arquivo de texto.
  3. abra o arquivo separado por vírgula no excel.
  4. Desenhe o gráfico para esses dados usando o utilitário de gráfico do excel.

Se você quiser capturas instantâneas de memória em diferentes intervalos de tempo ... defina a tarefa cron no intervalo desejado e execute o script.

espero que ajude....

Jeff Atwood
fonte
0

Não é exatamente o que você está procurando, mas talvez você possa adaptá-lo às suas necessidades usando esta referência (procure por Uso da memória por processo).

Ivan
fonte
0

Você pode usar #top ou #sysstat

Rajat
fonte
0

Não entrei em mais detalhes, mas o collectl tem uma opção para gerar saída separada por delimitador. No caso do gnuplot, você apenas gera seus dados com espaços e está pronto. Ele ainda carrega muito bem no Excel. Se você deseja vírgulas, pode alterar o delimitador e, se realmente deseja executar a rota rrd (apenas tome cuidado, pois os gráficos não correspondem aos dados!), Você pode alterar o delimitador para dois pontos e até alterar os carimbos de hora para UTC. -marca


fonte
0

O kSar, baseado em dados sar, mas baseado em java, é mais ou menos independente da plataforma e permitirá que você faça ssh em um host remoto para buscar os dados.

http://ksar.atomique.net/

Greeblesnort
fonte