Come trovare i processi che stanno controllando la macchina


10

Scenario: all'improvviso, il mio computer sembra lento. Il mouse si sposta ma le finestre impiegano molto tempo ad aprirsi, ecc. uptimeIndica che il carico è di 7,69 e aumenta.

Qual è il modo più veloce per scoprire quali processi sono la causa del carico?

Ora, "top" e strumenti simili non sono la risposta perché mostrano l'utilizzo della CPU o della memoria, ma non entrambi contemporaneamente. Ciò di cui ho bisogno è il singolo comando che potrei essere in grado di digitare mentre succede - qualcosa che riuscirà a capire

Il sistema sta provando a scambiare 8 GB di RAM su disco perché il processo X ...

o

il processo X cerca su tutto il disco

o

il processo X utilizza il 400% di CPU "

Quindi quello che sto cercando è iostat, htop / atop e strumenti simili si incontrano in uno con un output come questo:

 1235 cp - Disk trashing
   87 chrome - Uses 2 GB of RAM
  137 nfs_bench - Uses 95% of the network bandwidth

Non voglio uno strumento che mi dia alcuni numeri che posso analizzare ma uno strumento che mi dice esattamente quale processo provoca il carico corrente. Supponiamo che l'utente davanti alla tastiera sappia a malapena scrivere "process", ma l'utente viene rapidamente sopraffatto quando si tratta di "dimensione residente", "memoria virtuale" o "ciclo di vita del processo".

Il mio argomento va così: un utente nota un problema. Ci possono essere migliaia di motivi ... beh, quasi :-) L'utente vuole conoscere l'origine del problema.

Le soluzioni attuali mi danno un sacco di numeri e devo sapere cosa significano questi numeri. Quello che sto cercando è un meta strumento. Il 99% dei dati è irrilevante per il problema. Quindi ciò che lo strumento dovrebbe fare è cercare processi che racchiudano alcune risorse ed elencare solo quelli insieme a "questo processo ha bisogno di molta CPU, questo produce molti IRQ, questo processo alloca molta RAM (ed è ancora in crescita)".

Questo sarà un elenco relativamente breve. Sarà molto più semplice per qualcuno di nuovo individuare questo colpevole da questo elenco piuttosto che dall'output di, diciamo, htopche mi dà circa 5000 numeri ma mi richiede di piegare da solo i processi multi-thread (ho 50 righe che dicono VIRT 2750Mma solo 16 GB di RAM: la macchina dovrebbe scambiarsi a morte ma, naturalmente, si tratta di un'errata interpretazione dei dati che possono accadere rapidamente).


Non vedo perché. I sintomi che descrivi non sono quelli di un cestino del disco (non influirebbero sul mouse). Il mouse lento è una CPU classica a piena capacità.
soandos,

1
Questo è solo un esempio. Per favore, prendilo con un granello di sale. Immagina un noob seduto davanti al computer che non sa nulla. Come può scoprire più facilmente cosa sta succedendo (cioè senza passare mezz'ora a cercare su top
Google

Sei alla ricerca di un equivalente Linux di Task Manager con una GUI e tutto o qualcos'altro?
soandos,

Cerco qualcosa che eseguo e che dice "Il processo X sta controllando la macchina".
Aaron Digulla,

Risposte:


3

Devo sorridere alle risposte perché ognuna ti ha detto di eseguire lo strumento X. L'unico problema è se quello che vedi è intermittente non ci sarà modo di correlare nulla. Uno strumento come sar può essere d'aiuto se lo esegui con una frequenza abbastanza elevata, ma direi che collectl è ancora meglio.

Come sar , lo esegui come demone installando l'RPM e facendo /etc/init.d/collectl start.

Ora, quando vedi qualcosa di lento, collectl -p /var/log/collectl/filename --topriprodurrà i dati e ti mostrerà i processi principali. Avresti anche potuto correre collectl --tope vederli in tempo reale. A proposito: tutto ciò che puoi fare in tempo reale è anche possibile riprodurre.

Per quanto riguarda il carico della CPU, cosa succede se si viene sovraccarichi di interruzioni? collectl -sCnon mostrerà solo i carichi sulle singole CPU (o userà -scper il carico medio), ma mostrerà come stanno spendendo il loro tempo. Includi -j( -scj) e vedrai il numero di interrupt / CPU. Usa le maiuscole -Je vedrai i TIPI di ogni interrupt / CPU.

Naturalmente, se ti piace davvero vmstat, puoi sempre riprodurre i dati di raccolta con --vmstate mostrerà i dati storici in formato vmstat.

Ci sono molti più interruttori di quanti ne abbia il tempo di elencare, ma puoi verificarli su SourceForge o semplicemente cercarli su Google.


Grazie; questo non è esattamente quello che stavo cercando, ma almeno è un buon punto di partenza.
Aaron Digulla,

Strumento fantastico! E su Ubuntu (almeno dal 12.04) devi solo installare il pacchetto - avvia automaticamente il demone all'installazione e al riavvio successivo :)
nealmcb

6

"top" funziona abbastanza bene, purché si guardino i numeri giusti. Vediamo:

top - 13:11:45 up 13 days,  1:13, 21 users,  load average: 0.06, 0.11, 0.26
Tasks: 271 total,   2 running, 267 sleeping,   0 stopped,   2 zombie
Cpu(s): 19.0%us,  6.3%sy,  0.0%ni, 74.0%id,  0.5%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   8183668k total,  8002712k used,   180956k free,    12476k buffers
Swap: 11847900k total,   723480k used, 11124420k free,   767016k cached

Ora, se il sistema è lento perché la CPU è tutta occupata, viene mostrata come "us" e "sy" colonne su "Cpu (s):" riga vicina al 100% insieme.

Se è lento a causa dello scambio, "Mem:" "free" mostra valori molto bassi e "Swap:" "usa" valori alti.

Se è lento a causa dell'I / O in generale, allora "Cpu (s):" "wa" dice che il tempo è impiegato per l'attesa dell'I / O.

Ora, se sai che le attese degli I / O sono il problema, puoi usare i programmi "iotop" per sapere quali processi creano la maggior parte degli I / O.


+1 Ma sto più cercando uno strumento che fa questa analisi per me e stampa il processo insieme ad alcune informazioni su cosa non va. Non voglio raccoglierlo dalle figure "grezze". Nulla?
Aaron Digulla,

1
Mi dispiace, ma non puoi risolvere problemi come la lentezza della macchina senza comprendere a livello base la differenza tra i diversi tipi di lentezza. Se esistono tali strumenti, non li conosco; molto probabilmente hai bisogno di un amministratore di computer / ragazzo di manutenzione capace.
Zds,

Sarebbe bello se esistesse uno strumento del genere perché è certamente possibile determinarlo automaticamente: se posso dirlo dall'output di top, può farlo anche un computer. Questo non è il sorriso di Monna Lisa, è solo uno scricchiolio di numeri per trovare quelli "cattivi".
Aaron Digulla,

2

In base all'utilizzo del 400%, suppongo che tu abbia un processore quad-core. La media del carico è quasi il doppio della capacità e metà dei processi è in attesa di CPU.

Innanzitutto, renicela shell su 0 o -10 per ottenere un sistema più reattivo, quindi utilizzare htopper trovare i processi offensivi e seguirlo con stracesu un determinato processo. Altri strumenti che potrebbero essere utili sono:

  • vmsat
  • sar
  • iostat
  • pmap

1

Un mouse lento potrebbe anche essere dovuto a un carico di interruzione troppo elevato oppure i controller USB sono molto occupati (suppongo sia un mouse USB).


Qualche strumento che mi dice quale driver / componente causa l'alto carico IRQ?
Aaron Digulla,

1

vmstat potrebbe aiutarti in termini generali. Un esempio di utilizzo è:

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0 977908 426184 1543884    0    0    38    45  106  385  4  1 95  1

Puoi eseguirlo anche ogni X secondi - basta aggiungere il numero X dopo il comando.

Modifica: in vista del commento ... Scrivi quanto segue in un file e rendilo eseguibile. Ti dirà i primi 3 processi sulla macchina.

top -n 1 | tail -16 | head -4 | awk '{print $13}'

Se volevi sapere quale memoria hogged rispetto alla CPU, leggi la pagina man in alto e cambia l'ordine di visualizzazione.


Sto cercando qualcosa di più alto livello. Dovrebbe eseguire vmstat e analizzare i numeri per me, quindi non devo sapere cosa significa "cs" e se un "cs" grande è "buono" o "cattivo".
Aaron Digulla,
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.