Como monitorar e registrar o uso de processos de memória / CPU ao longo do tempo? [fechadas]

30

Estou procurando uma maneira de diagnosticar problemas, como morte de swap, em que um processo de memória insuficiente preenche a troca e mata a máquina inteira (como o apache).

Eu já estou usando cactos e posso configurar nagios (embora prefira) ou munin, mas até onde eu sei, eles não podem registrar o uso de programas individuais - apenas o status geral.

Eu sei que posso rolar um script que >> para algum arquivo a cada 30s, mas eu gostaria de ver se já existe uma solução madura.

Novamente, o ideal seria:

  • registrar o uso da memória dos processos a cada N segundos
  • registrar o uso da CPU dos processos a cada N segundos
  • gráficos e histórico de suporte
  • médias de suporte - como o mysqld usou 43% da CPU no último dia e média de 400 MB de memória
  • seja livre e de código aberto

Os nomes de processos não são e não devem ser conhecidos antecipadamente - a idéia é apenas deixá-lo monitorar e depois dar uma olhada nos principais infratores.

Meu sistema é Linux (OpenSUSE).

Artem Russakovskii
fonte
Deseja monitorar qualquer processo que possa ter um vazamento de memória (os N principais porcos de memória) ou você deseja monitorar um conjunto definido de processos (por exemplo, servidor da web Apache e um processo do Tomcat)? O último é possível com alguns simples plugins Nagios ou Cacti. O primeiro é mais difícil. Você deve esclarecer isso.
Stefan Lasiewski
Eu já o esclarei no post, mas para esclarecer novamente: quero saber o estado do sistema quando ele cair devido à troca de morte. Quero saber quem são os piores criminosos. E, aliás, não precisa ser um vazamento de memória - apenas um fluxo de tráfego ou o que causa alto uso de memória. Portanto, novamente, nenhum conhecimento avançado de nomes binários deve ser configurado.
Artem Russakovskii
possível duplicado - serverfault.com/questions/67234/…
warren
Warren, essa é uma pergunta totalmente diferente.
Artem Russakovskii
8
Fechar uma publicação de boa qualidade foi uma coisa ruim, especialmente depois de quatro anos retroativamente.
peterh diz restabelecer Monica

Respostas:

16

Se você deseja apenas os principais ofensores, considere executar topcom um intervalo relativamente longo (60 segundos ou mais) no modo em lote. Pode ser necessário mais de uma topexecução para capturar os principais infratores em vários recursos. Eu configurei os sistemas para serem executados toppor alguns ciclos quando um recurso estava sendo usado em excesso.

Considere executar sarno modo em lote para capturar a utilização de recursos. Sei que isso é baseado em servidor, mas é útil determinar os horários em que os problemas estão ocorrendo.

Execute munine ative as notificações. Isso pode lhe dar a chance de entrar e assistir o servidor caindo. Você pode corrigir o problema antes que ele desça.

Para vazamentos de memória, um aumento constante no uso de swap indica um problema. Certa vez, vi um servidor morrer lentamente durante um período de dias. O serviço problemático era um programa que monitora outros processos quanto a vazamentos de memória. O administrador do sistema insistia que o crescente uso de swap não era um problema, até o servidor parar de responder.

Você pode achar que cfenginea detecção de anomalia pode ser usada para acionar um script para capturar o estado do sistema quando algo der errado. Você pode querer muitas informações, além dos processos que utilizam mais recursos. Para um influxo repentino de uso, convém uma lista de conexões de rede (por endereço, não por nome). O uso da memória também é útil.

BillThor
fonte
12

O sysstat é criado exatamente para o seu tipo de objetivo.

Peter Eisentraut
fonte
É aqui que você deve começar. Você não sabe por onde começar um exame até saber onde pode ter as melhores chances. Sysstat é o que você está procurando (também possui gráficos bonitos). Depois de saber mais, use systemtap.
Allen
9

Eu já usei no topo antes:

http://freshmeat.net/projects/atop/

"O Atop é um monitor de desempenho em tela cheia ASCII capaz de relatar a atividade de todos os processos (mesmo que os processos tenham terminado durante o intervalo), o registro diário da atividade do sistema e do processo para análises de longo prazo, destacando os recursos sobrecarregados do sistema usando cores, etc. Em intervalos regulares, mostra a atividade no nível do sistema relacionada à CPU, memória, swap, discos e camadas de rede e, para cada processo ativo, mostra a utilização da CPU, o crescimento da memória, a prioridade, o nome de usuário, o estado, e código de saída ".

NinjaCat
fonte
no topo não parece ter um relatório que me forneça o que eu queria. Por favor me corrija se eu estiver errado.
Artem Russakovskii
Ele cuida dos seus dois primeiros pontos (memória / CPU por processo). Você pode usar a biblioteca para reunir essas estatísticas e, em seguida, fazer seu histórico / gráficos com base nos dados.
NinjaCat
4
@ artem-russakovskii - Por padrão, no topo dos registros de dados em um arquivo a cada dez minutos. Se o servidor travou às 3:45, você poderia começar no topo atop -r log_filename, pressione mpara alternar para a exibição de uso da memória por processo e, em seguida, pressione tpara avançar em incrementos de 10 minutos até às 3:40. Você pode ler mais sobre os conceitos básicos do uso sobre a lwn.net/Articles/387202 e ver um exemplo de identificar um vazamento de memória no atoptool.nl/download/case_leakage.pdf
sciurus
6

Já experimentou collectd?
É muito poderoso e personalizável.
Possui muitos plugins e pode ser integrado ao nagios.

http://collectd.org/features.shtml

PiL
fonte
O Collectd é muito leve, não é muito difícil de configurar e permitirá que você veja o crescimento da memória / troca ao longo do tempo. Porém, ele não identificará os processos incorretos - mas talvez você consiga perceber e captar o crescimento da memória a tempo e inspecionar a situação manualmente top.
Marius Gedminas
11
Devo dizer que não experimentei esse plug-in, mas lendo o manual do plug-in de processo de collectd: "Se processos forem selecionados, as seguintes informações serão coletadas. Todas essas informações serão agregadas pelo nome do processo. Seu tamanho de segmento residente, Tempo de usuário e sistema usado, O número de processos com esse nome, O número de threads (resumidos em todos os processos), O número de falhas de página principal e secundária.Números de E / S aproximados (bytes gravados e lidos devido para syscalls pelo processo).
PiL
Você pode selecionar os processos ou por nome ou por regex.
PiL
2

Centreon em cima de Nagios, Nagios juntamente com NRPE. Em seguida, você pode escrever scripts personalizados para relatar dados em QUALQUER formato que desejar ao NRPE. O Nagios pesquisa os dados dos servidores remotos com o NRPE e o Centreon faz um gráfico bonito e adiciona uma tonelada de flexibilidade ao usuário. Nós o usamos em http://beyondhosting.net Eu tenho um modelo de contêiner VZ com a instalação do centreon + nagios, se você quiser.

Graphs centreon builds hostthenpost.org/tyler/2010-07-23_1719.png

VisBits
fonte
Eu gostaria de uma solução pronta para relatar as coisas que mencionei, principalmente processos que consomem mais memória. Também não tenho certeza do que é VZ.
Artem Russakovskii
2

O nmon é uma ótima ferramenta que faz o que você procura. Desenvolvido para AIX e Linux. Produz uma tonelada de resultados detalhados e fáceis de colocar em relatórios. Se você pesquisar no Google, há um wiki da IBM que possui um monte de documentação e utilitários adicionais para analisar os dados.

mattcaffeine
fonte
2

A densidade do servidor faz exatamente o que você descreve.

Eu o uso em um de nossos servidores de produção e estou muito feliz com isso. Sua principal característica é a capacidade de visualizar gráficos, clicar em um pico e ver o consumo de CPU / Memória do servidor no momento atual, incluindo todos os processos em execução. Eles chamam de instantâneos .

Está melhorando constantemente. Um dos recursos mais recentes é a detecção de anomalias , que permite detectar facilmente anomalias. Você também pode configurar vários limites

Aron Rotteveel
fonte
11
Ah, esqueci de mencionar a pequena parte em que eu preferiria que fosse gratuita e de código aberto, se possível. Mais de US $ 100 por servidor não é exatamente o que estou procurando gastar (e eu só tenho 1 servidor, não 5). serverdensity.com/pricing
Artem Russakovskii
2

As respostas sugeridas quando fiz uma pergunta semelhante :

Icapan disse :

Munin é a maneira mais fácil de obter gráficos de tempo de atividade com o mínimo de esforço na instalação e configuração. Eu também uso o topo para uso agregado da CPU por algum processo, mas não foi isso que você pediu.

David Spillet disse :

Eu uso o collectd para registrar a carga do sistema entre vários outros parâmetros. Ele armazena os dados nos armazenamentos RRD que podem ser representados graficamente e, de outra forma, analisados ​​usando as muitas ferramentas e scripts disponíveis. Eu uso uma versão modificada desse script para meus gráficos ( saída de amostra ).

O Collectd possui plugins para monitorar muitas coisas (tudo o que é solicitado e algumas coisas no topo), e criar o seu próprio não deve ser difícil se você precisar de algo especializado, por isso é uma ferramenta muito flexível. A configuração dos gráficos no rrd.cgi é um processo muito manual, embora não seja difícil, embora você possa encontrar uma ferramenta mais conveniente para trabalhar com os arquivos RRD mantidos pelo collectd.

Você também pode verificar o Nagios ou o OpenNMS também.

Warren
fonte
1

Munin fará tudo o que você precisa imediatamente, sem precisar do Nagios ou de qualquer outra ferramenta. Existem RPMs disponíveis para o OpenSUSE.

gareth_bowles
fonte
Faz isso com um plugin. Se sim, qual? Não consegui encontrar um que não exija uma lista pré-configurada de processos para monitorar.
Artem Russakovskii
Não ficou claro em sua pergunta original que você não deseja monitorar uma lista pré-configurada de processos - você poderia fornecer mais detalhes sobre seus requisitos?
2741010 gareth_bowles
Esclarecimento: Os nomes dos processos não são e não devem ser conhecidos antecipadamente - a idéia é apenas deixá-lo monitorar e depois dar uma olhada nos principais infratores.
Artem Russakovskii
1

Talvez o bom e velho OProfile faça o que você precisa? É um gerador de perfil no nível do sistema baseado em kernel com apenas uma pequena sobrecarga (algumas porcentagens).

Depois, há um excelente script Perl, o PSMon , que permite configurar todo tipo de limites de CPU / memória. Se esses valores forem excedidos, o psmon registrará um erro e / ou matará o processo ofensivo.

O último não produziria nenhum relatório de criação de perfil para você, mas se decidir interromper o mesmo processo repetidamente, provavelmente você encontrou o bastardo desagradável que estava procurando. :-)

Janne Pikkarainen
fonte