it-swarm.it

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

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

41
ssanj

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. Per esempio. su una CPU dual-core un processo a thread singolo non supererà il 50% di utilizzo della CPU.

  • Se la CPU e la memoria sono disponibili, ma i dischi sono molto occupati o la latenza IO sembra elevata, è probabile che sia associato a IO. 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.

16
Sudhanshu

controlla iotop, può essere utile

11
ithkuil

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.

9
JanC

Oltre agli altri strumenti menzionati, esegui ps l PID, inserendo l'id di processo pertinente, oppure guarda 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 legge molti file o utilizza molta memoria e scambia. 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 Che cos'è il "canale di attesa" di un processo?

4
poolie

Esegui top e osserva la riga di utilizzo della cpu. Una percentuale di utente alto indica che è associato alla CPU. Una% di attesa alta indica che è IO associato.

2
psusi