Come posso sapere se un processo è associato a CPU, memoria o disco?


42

Come posso sapere se un processo è associato a CPU, memoria o disco?


Se stai usando una GUI di gnome, puoi aggiungere l'applet di Monitor di sistema al tuo pannello. Nelle impostazioni è possibile impostare i cicli persi su IO-Wait per apparire in bianco e impostare i grafici Memory, CPU e Disk Read / Write da mostrare. Di solito cambio i colori predefiniti del grafico per semplificare la distinzione tra memoria utente / sistema operativo e lettura / scrittura del disco. Non è una vera soluzione, ma è utile avere a fianco tutti gli strumenti citati nelle risposte.
Jeremy,

1
@ luis-alvarado Non sarei d'accordo sul fatto che questa domanda non sia utile, anche se direi che potrebbe adattarsi meglio su StackOverflow o simili. Sono venuto qui alla ricerca di una soluzione.
skeggse

Il problema con la domanda posta è che non tiene conto dell'ambiente di esecuzione. Quale metodo è più efficace per scoprire il collo di bottiglia del componente host di un lavoro / processo è intimamente legato al runtime, all'ambiente di esecuzione, al sistema operativo host, all'hardware, ecc. Del lavoro e quali strumenti sono disponibili per ciascun componente per ispezionarlo. Alcuni runtime (il runtime di Erlang o la JVM di IBM, per esempio) hanno strumenti approfonditi per questo che coprono l'intero ambiente, altri mancano totalmente di strumenti e ti lasciano fare congetture istruite basate su qualunque htop / iotop / ecc. posso mostrarti.
zxq9,

Risposte:


19

Ciò richiede un po 'di voodoo. Dipende. Esempio:

  • Se c'è abbastanza memoria e i dischi non sembrano troppo occupati, potrebbe essere associato alla CPU. Guarda l'utilizzo della CPU e se è al 100% è associato alla CPU. In caso contrario, c'è un collo di bottiglia artificiale nell'implementazione. Ad esempio, su una CPU dual-core un processo a thread singolo non supererà il 50% di utilizzo della CPU.

  • Se sono disponibili CPU e memoria, ma i dischi sono molto occupati o la latenza di I / O sembra elevata, è probabile che il suo I / O sia associato. Verifica se l'aggiunta di più dischi (RAID?) Aiuta.

  • Nessuno dei precedenti? Controlla la memoria disponibile.

  • Abbastanza memoria? Potrebbe esserci un collo di bottiglia artificiale nel processo stesso, cioè forse qualcuno ha dimenticato di rimuovere un sonno (1)? Naah di solito non è così facile. ;)

C'è un motivo per cui abbiamo un intero laboratorio per ingegneri delle prestazioni nella maggior parte delle aziende che si occupano di prodotti sensibili alle prestazioni!

Utilizzare strumenti come sar, vmstat, iostat, oprofile, lockstat, dtrace, strumenti di monitoraggio perf specifici del prodotto, ecc., Per eseguire il debug di problemi perf.


2
Esiste uno strumento che lega tutti questi insieme?
ssanj,

di solito no, ma se dtrace è disponibile sul tuo sistema (Solaris / FreeBSD / Mac OS X?) potresti andare lontano semplicemente usando quello.
Sudhanshu,

Ho appena ricordato che c'è Systemtap su Linux (simile a dtrace), tranne per il fatto che non sono sicuro della maturità dello strumento.
Sudhanshu,

vmstat è utile.
James,


9

Uno strumento che può essere utile per il controllo in tempo reale di una serie di statistiche di processo (memoria, utilizzo della CPU, I / O, ecc.) È htop . Non sostituisce gli strumenti più specializzati nominati da Sudhanshu, ma potrebbe essere un buon inizio.


4

Oltre agli altri strumenti menzionati, esegui ps l PID, inserendo l'id di processo pertinente o osserva le colonne STATE e WCHAN in alto o in alto.

Se è nello stato D (per disco), allora sta eseguendo il file IO. Ciò potrebbe essere dovuto al fatto che sta leggendo molti file o perché sta usando molta memoria e scambiando. La colonna WCHAN ti dirà quale funzione del kernel è dentro; cercare su Google per loro o chiedere qui può darvi qualche indicazione sul loro significato.

Se è nello stato R (esecuzione), sta usando la CPU nello spazio utente, in altre parole è CPU collegata in quel momento.

Se si trova nello stato S (sospensione), si trova all'interno di una chiamata di sistema interrompibile, il che può significare che sta effettivamente dormendo o sta facendo qualcosa come aspettare il traffico di rete o un blocco. Ancora una volta, guardando lo specifico wchan ti dirò di più.

Vedi anche Cos'è il "canale di attesa" di un processo?


2

Esegui tope guarda la linea di utilizzo della CPU. Una percentuale di utente elevato indica che è associato alla CPU. Una% di attesa elevata indica che è associato a IO.

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.