Quanti core sto usando su un server Linux?


30

Mi sto solo chiedendo come posso scoprire in bash quanti core CPU sta usando un utente su un server Linux?

Sto inviando una buona quantità di lavori in background al server, quindi vorrei scrivere uno script bash per verificare prima di inoltrare un lavoro se i lavori (processi) in esecuzione inviati da me sono troppi, perché devo lasciare altri gli utenti hanno abbastanza core da usare per i loro lavori. Mi piacerebbe sapere quale comando bash può dirmi quanti core stanno usando i miei lavori adesso.

Grazie e saluti!

Risposte:


39

Per ottenere il numero di core della CPU per CPU:

grep "^core id" /proc/cpuinfo | sort -u | wc -l

O per ottenere il numero di CPU fisiche :

grep "^physical id" /proc/cpuinfo | sort -u | wc -l

come verificare questo per un determinato utente?
Makis,

26

Non so se sia d'aiuto, ma è possibile utilizzare l' mpstatutilità per ottenere una ripartizione dell'utilizzo della CPU per singolo processore (o core). Per esempio:

$ mpstat -P ALL 1

12:49:59 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
12:50:00 PM  all    7.89    0.00    1.25    0.88    0.00    0.00    0.00   89.97   1359.00
12:50:00 PM    0   14.00    0.00    0.00    0.00    0.00    0.00    0.00   86.00   1043.00
12:50:00 PM    1   15.84    0.00    7.92    3.96    0.00    0.99    0.00   71.29    297.00
12:50:00 PM    2    3.96    0.00    0.00    1.98    0.00    0.99    0.00   93.07      0.00
12:50:00 PM    3    3.96    0.00    0.99    2.97    0.00    0.00    0.00   92.08      0.00
12:50:00 PM    4    4.00    0.00    0.00    0.00    0.00    0.00    0.00   96.00      0.00
12:50:00 PM    5    4.95    0.00    0.99    0.00    0.00    0.00    0.00   94.06     18.00
12:50:00 PM    6   10.89    0.00    0.99    0.00    0.00    0.00    0.00   88.12      0.00
12:50:00 PM    7    5.05    0.00    0.00    0.00    0.00    0.00    0.00   94.95      0.00

In questo esempio, si può vedere che di CPU 0, 1e 6stanno facendo più lavoro di quanto il resto di loro. A volte vedrai che una singola CPU è vicina (o uguale a) al 100% mentre altre sono a zero. Questo può essere un indicatore di programma (o parte di un programma) a thread singolo e in grado di utilizzare una sola CPU alla volta.

Per installare mpstatsu un sistema Fedora, RHEL o CentOS, usare yum install sysstat.


Grazie mille per aver fornito questa risposta! I miei colleghi stavano usando il comando "top" e stavano facendo tutte le conclusioni sbagliate sull'utilizzo del processore fino a quando non ho mostrato loro il comando mpstat.
Nav

Non disponibile su Ubuntu: # aptitude search mpstat #.
Alix Axel,

2
Prova aptitude search systatinvece @AlixAxel .
Matt Solnit,

@MattSolnit: Ancora nessuna fortuna.
Alix Axel,

mpstat è fornito dal pacchetto sysstat su Debian e su Ubuntu . Mi aspetto che la maggior parte delle distribuzioni derivate da Debian utilizzino lo stesso nome di pacchetto. Sulle distribuzioni derivate da Debian, inizia da apt-cache search --full mpstat.
un CVn il

2

A meno che non sia configurato esplicitamente per non (ad es. Bloccare un processo su una CPU specifica), si può presumere che tutti i core siano sempre in uso. Lo scheduler assegnerà i processi al prossimo core disponibile. Caso in questione, "System Monitor" (parte di GNOME) mostra il mio carico quasi lo stesso su tutti e 4 i core della mia macchina.


Sto inviando una buona quantità di lavori in background al server, quindi mi piace scrivere uno script bash per verificare prima di inoltrare un lavoro se i lavori in corso (processi) inviati da me sono troppi, perché devo lasciare che altri utenti abbiano abbastanza core da usare per i loro lavori. Quindi mi piace sapere quale comando bash può dirmi quanti core stanno usando i miei lavori adesso.
Tim

3
Non credo tu abbia capito la mia risposta. Il numero di core in uso è SEMPRE il numero totale di core disponibili. Utilizzare il carico complessivo del sistema come fattore per determinare se l'inoltro del lavoro deve essere limitato.
EmmEff

Grazie! Controllo il carico complessivo del sistema. Uno dei miei colleghi mi ha detto che non posso esaurire tutti i nuclei perché chissà che altri gestiranno presto i loro lavori e che i miei lavori dureranno per un po '. Pensi anche che devo limitare i core che sto usando?
Tim

2

Quindi vedrai che ci sono risposte che ti diranno come vengono utilizzati i tuoi core.

TUTTAVIA - questo non ti sta davvero facendo un servizio. Hai fatto un presupposto di base che semplicemente non regge - che i tuoi lavori tenderanno a raggrupparsi in un sottoinsieme dei core.

Invece, i tuoi lavori saranno distribuiti su tutti i core, a meno che tu non implementi qualcosa che li tenga "impresso" in qualche modo. (Nota: non lo sto raccomandando; sto solo dicendo "a meno che")

Ecco una strategia alternativa: identifica per il tuo sistema particolare qual è il livello LOAD quando ritieni che sia "accettabile" che altri utenti aggiungano più lavori. Quindi, crea qualcosa che inoltri un nuovo processo in background solo quando il livello di carico scende al di sotto di tale limite.

In questo modo, la soluzione sarà indipendente dal numero di core, più portatile, più flessibile e più facile da "modificare".


Ho appena notato un commento che hai aggiunto alla risposta di un altro poster, indicando che ciò è dovuto a qualcosa che un collega ti ha detto. Quindi, in effetti, sembra che il malinteso sia suo, non tuo. Mi dispiace per quello!
pag

Grazie! Per quanto riguarda "Identifica per il tuo particolare sistema qual è il livello di CARICO quando ritieni che sia" accettabile "che altri utenti aggiungano più lavori", se il carico attuale non è principalmente causato dai miei lavori in corso, mi sentirei più libero di usare le CPU restanti, ma se nel carico corrente i miei lavori in corso richiedono una buona quantità, probabilmente dovrei rinunciare a usare le CPU rimanenti. Quindi pensi ancora che non debba stimare l'utilizzo della CPU dei miei lavori totali in esecuzione?
Tim

No, non credo davvero che abbia senso distinguere tra il carico corrente rispetto ai tuoi lavori rispetto ad altri lavori. Considera la semplicità: il tuo lavoro cerca di essere un buon cittadino e si sottomette solo se il carico è al di sotto di un livello che ritieni accettabile. L'idea è MAI quella di utilizzare tutta la capacità rimanente; che lascia gli altri futuri utenti in difficoltà. Idealmente, tutti gli utenti dovrebbero usare la stessa logica per questo.
pbr

2

Se vuoi farlo in modo che funzioni su Linux e OS X, puoi fare:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)

1

Puoi ottenere una stima approssimativa eseguendo top, premendo ' U' e specificando il tuo nome utente, quindi sommando l'utilizzo della CPU dei tuoi primi processi.


Mi piace conoscere un comando bash che può dirmi il numero, dal momento che voglio usarlo in uno script bash.
Tim

@Tim toppuò essere eseguito in modalità batch con l'opzione -b. Combinalo con l'opzione -n ​​per ottenere il numero di iterazioni necessarie.
nagul

1
puoi fornire un esempio di codice per ottenere il numero di core utilizzati da tutti i processi (processi) inviati da un utente?
Tim

@ Tim Non fuori dai pipistrelli. O dovrei scrivere un tale script analizzando l' topoutput o google per vedere se qualcuno lo ha già fatto. Tuttavia, non sono convinto che valga la pena lo sforzo perché penso che otterrò output diversi per ogni corsa data la velocità con cui si verifica il cambio di contesto. Il sistema non carica un indicatore abbastanza buono? Indica efficacemente quanti core virtuali sono necessari per gestire la coda dei processi (processi in attesa sulla CPU).
nagul

@ nagul: Sì, il caricamento del sistema è buono e lo controllo anche io. Tuttavia alcune persone continuano a dirmi che non posso usare tutti i core perché chissà che altri gestiranno presto il loro lavoro. Quindi immagino di dover limitare i core che sto usando. A proposito, hai visto da qualche parte degli script online che controllano il carico della CPU e della memoria e inoltrano dinamicamente i lavori in base all'utilizzo? Li sto cercando da tanto tempo. Grazie!
Tim
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.