Come monitorare e registrare l'utilizzo della memoria / CPU dei processi nel tempo? [chiuso]


30

Sto cercando un modo per diagnosticare problemi, come la morte degli swap, in cui un processo di memoria balooning riempie lo swap e uccide l'intera macchina (come apache).

Sto già utilizzando cactus e posso installare nagios (anche se preferirei non farlo) o munin, ma per quanto ne so non possono registrare l'utilizzo del singolo programma - solo lo stato generale.

So di poter eseguire il rollup di uno script che >> su un file ogni 30s, ma mi piacerebbe vedere se esiste già una soluzione matura esistente.

Ancora una volta, idealmente dovrebbe:

  • registra l'utilizzo della memoria dei processi ogni N secondi
  • registra l'utilizzo della CPU dei processi ogni N secondi
  • grafici di supporto e cronologia
  • medie di supporto - come mysqld ha utilizzato il 43% di CPU nell'ultimo giorno e una memoria media di 400 MB
  • essere libero e open source

I nomi dei processi non sono e non dovrebbero essere conosciuti in anticipo: l'idea è di lasciarlo monitorare e quindi dare un'occhiata ai principali autori di reato.

Il mio sistema è Linux (OpenSUSE).


Vuoi monitorare qualsiasi processo che potrebbe avere una perdita di memoria (I primi maiali della memoria) o stai cercando di monitorare un set definito di processi (ad es. Server web Apache e un processo Tomcat)? Quest'ultimo è fattibile con alcuni semplici plugin Nagios o Cacti. Il primo è più difficile. Dovresti chiarire questo.
Stefan Lasiewski,

L'ho già chiarito nel post, ma per chiarire di nuovo: voglio conoscere lo stato del sistema quando si interrompe a causa della morte di scambio. Voglio sapere chi sono i peggiori trasgressori. E a proposito, non deve essere una perdita di memoria - solo un afflusso di traffico o qualunque cosa causi un elevato utilizzo della memoria. Quindi, ancora una volta, non è necessario configurare alcuna conoscenza anticipata dei nomi binari.
Artem Russakovskii,


Warren, questa è una domanda completamente diversa.
Artem Russakovskii,

8
Chiudere un post di così buona qualità è stata una brutta cosa, soprattutto dopo 4 anni in modo retroattivo.
Peter dice di reintegrare Monica il

Risposte:


16

Se vuoi solo i principali criminali, considera di correre topcon un intervallo relativamente lungo (oltre 60 secondi) in modalità batch. Potresti aver bisogno di più di una topcorsa per catturare i principali trasgressori su più risorse. Ho configurato i sistemi per l'esecuzione topper alcuni cicli durante l'utilizzo eccessivo di una risorsa.

Prendi in considerazione l'esecuzione sarin modalità batch per acquisire l'utilizzo delle risorse. Mi rendo conto che questo è basato su server, ma è utile determinare i momenti in cui si verificano problemi.

Esegui munine abilita le notifiche. Questo potrebbe darti la possibilità di entrare e guardare il server che non funziona. Potrebbe essere possibile correggere il problema prima che si risolva.

Per le perdite di memoria, un aumento costante nell'uso degli swap indica un problema. Una volta ho visto un server morire lentamente per un periodo di giorni. Il servizio problematico era un programma che monitorava altri processi per perdite di memoria. L'amministratore di sistema ha continuato a insistere sul fatto che l'uso crescente dello swap non era un problema, fino a quando il server non ha smesso di rispondere.

Potresti scoprire che cfengineil rilevamento delle anomalie può essere usato per attivare uno script per catturare lo stato del sistema quando le cose vanno male. Potresti volere molte informazioni oltre ai processi che utilizzano la maggior parte delle risorse. Per un afflusso improvviso di utilizzo potresti voler un elenco di connessioni di rete (per indirizzo e non per nome). Anche l'uso della memoria è utile.


12

sysstat è fatto praticamente esattamente per il tuo tipo di scopo.


Questo è dove dovresti iniziare. Non puoi sapere dove iniziare un esame finché non sai dove potresti avere le migliori possibilità. Sysstat è quello che stai cercando (ha anche dei bei grafici). Una volta che ne sai di più usa systemtap.
Allen

9

Ho usato in cima prima:

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

"Atop è un monitor delle prestazioni a schermo intero ASCII in grado di segnalare l'attività di tutti i processi (anche se i processi sono terminati durante l'intervallo), la registrazione giornaliera del sistema e l'attività dei processi per l'analisi a lungo termine, evidenziando risorse di sistema sovraccariche utilizzando colori, ecc. A intervalli regolari, mostra attività a livello di sistema relative a CPU, memoria, scambio, dischi e livelli di rete e per ogni processo attivo mostra l'utilizzo della CPU, la crescita della memoria, la priorità, il nome utente, lo stato, e codice di uscita ".


in cima non sembra avere un rapporto che mi fornirebbe quello che volevo. Per favore correggimi se sbaglio.
Artem Russakovskii,

Si prende cura dei tuoi primi due punti elenco (memoria / CPU per processo). È possibile utilizzare la libreria per raccogliere queste statistiche e quindi eseguire la cronologia / la rappresentazione grafica in base ai dati.
NinjaCat,

4
@ artem-russakovskii: per impostazione predefinita in cima registra i dati in un file ogni dieci minuti. Se il tuo server si è arrestato in modo anomalo alle 3:45 con cui potresti iniziare atop -r log_filename, premi mper passare alla visualizzazione dell'utilizzo della memoria per processo, quindi premi tper andare avanti con incrementi di 10 minuti fino alle 3:40. Puoi leggere di più sulle basi dell'uso di atop su lwn.net/Articles/387202 e vedere un esempio di identificazione di una perdita di memoria su atoptool.nl/download/case_leakage.pdf
sciurus

6

Hai provato a collezionare?
È molto potente e personalizzabile.
Ha molti plugin e potrebbe essere integrato con nagios.

http://collectd.org/features.shtml


Collectd è molto leggero, non troppo difficile da configurare e ti permetterà di vedere la crescita della memoria / scambio nel tempo. Tuttavia, non individuerà i processi offensivi, ma forse sarai in grado di notare e catturare la crescita della memoria nel tempo e ispezionare manualmente la situazione top.
Marius Gedminas,

1
Devo dire che non ho provato quel plug-in, ma leggendo dal manuale del plug-in di processo di collectd: "Se i processi sono selezionati, vengono raccolte le seguenti informazioni. Tutte queste informazioni sono aggregate dal nome del processo. La dimensione del segmento residente, Tempo utente e di sistema utilizzati, il numero di processi con quel nome, il numero di thread (riepilogati su tutti i processi), il numero di errori di pagina principali e secondari. Numeri I / O approssimativi (byte scritti e letti dovuti a syscalls con il processo).
PiL

È possibile selezionare i processi o per nome o per regex.
PiL

2

Centreon in cima a Nagios, Nagios accoppiato con NRPE. È quindi possibile scrivere script personalizzati per segnalare i dati in QUALSIASI formato che si desidera NRPE. Nagios esegue quindi il polling dei dati dai server remoti con NRPE e Centreon crea un bel grafico e aggiunge un sacco di flessibilità all'utente. Lo usiamo su http://beyondhosting.net Ho un modello VZ Container con centreon + nagios setup già se lo vuoi.

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


Vorrei una soluzione pronta per riportare le cose che ho citato, soprattutto i processi che consumano più memoria. Inoltre non sono sicuro di cosa sia VZ.
Artem Russakovskii,

2

nmon è un ottimo strumento che fa quello che stai cercando. Sviluppato per AIX e Linux. Produce un sacco di output dettagliato e facile da inserire nei report. Se lo cerchi su Google, c'è un wiki IBM che ha un sacco di documentazione e utilità aggiuntive per l'analisi dei dati.


2

Server Density fa esattamente quello che descrivi.

Lo uso su uno dei nostri server di produzione e ne sono molto contento. La sua caratteristica principale è la possibilità di visualizzare grafici, fare clic su un picco e vedere il consumo di CPU / memoria del server in quel momento, inclusi tutti i processi in esecuzione. Lo chiamano istantanee .

È in costante miglioramento. Una delle ultime funzionalità è il rilevamento delle anomalie , che consente di rilevare facilmente le anomalie. È inoltre possibile impostare vari treshold


1
Ah, ho dimenticato di menzionare la piccola parte in cui preferirei che fosse gratuita e, se possibile, open source. Oltre $ 100 per server non sono proprio quello che sto cercando di spendere (e ho solo 1 server, non 5). serverdensity.com/pricing
Artem Russakovskii


2

Le risposte suggerite quando ho posto una domanda simile :

Icapan ha detto :

Munin è il modo più semplice per ottenere grafici di uptime con il minimo sforzo di installazione e configurazione. Uso anche in cima per l'utilizzo aggregato della cpu con qualche processo, ma non è quello che hai chiesto.

David Spillet ha detto :

Uso collectd per registrare il carico del sistema tra una serie di altri parametri. Memorizza i dati nei negozi RRD che possono essere rappresentati graficamente e altrimenti analizzati utilizzando i numerosi strumenti e script disponibili. Uso una versione modificata di questo script per la mia rappresentazione grafica ( output di esempio ).

Collectd ha plug-in per monitorare molte cose (tutto ciò che è comunemente richiesto e alcune cose in cima) e creare il proprio non dovrebbe essere difficile se hai bisogno di qualcosa di specializzato, quindi rende uno strumento molto flessibile. La configurazione dei grafici in rrd.cgi è un processo molto manuale, sebbene non difficile, anche se potresti trovare uno strumento più conveniente per lavorare con i file RRD gestiti da collectd.

Puoi anche controllare Nagios o OpenNMS .


1

Munin farà tutto ciò di cui hai bisogno senza bisogno di Nagios o di altri strumenti. Sono disponibili RPM per OpenSUSE.


Lo fa con un plugin. In tal caso, quale? Non sono stato in grado di trovarne uno che non richieda un elenco preconfigurato di processi da monitorare.
Artem Russakovskii,

Dalla domanda originale non era chiaro che non si desidera monitorare un elenco preconfigurato di processi: è possibile fornire maggiori dettagli sulle proprie esigenze?
gareth_bowles,

Chiarimento: i nomi dei processi non sono e non dovrebbero essere conosciuti in anticipo - l'idea è di lasciarlo monitorare e quindi dare un'occhiata ai principali autori di reato.
Artem Russakovskii,

1

Forse il buon vecchio OProfile fa quello che ti serve? È un profiler a livello di sistema basato su kernel con solo un piccolo overhead (un paio di percentuali).

Poi c'è un eccellente script Perl, PSMon , che ti consente di impostare tutti i tipi di limiti CPU / memoria. Se vengono superati, psmon registra un errore e / o interrompe il processo offensivo.

Quest'ultimo non produrrà alcun rapporto di profilazione per te, ma se decide di uccidere lo stesso processo più e più volte, probabilmente hai trovato il brutto bastardo che stavi cercando. :-)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.