2009-07-29 7 views
12

In Linux esiste una funzione di libreria C incorporata per ottenere il carico della CPU della macchina? Presumibilmente potrei scrivere la mia funzione per l'apertura e l'analisi di un file in/proc, ma sembra che ci dovrebbe essere un modo migliore.API C per caricare la CPU in linux

  • non ha bisogno di essere portatile
  • specie non deve riguardare le librerie al di là di un'installazione di base RHEL4.
+1

Accesso alla/proc è il modo Unix di fare le cose. * Tutto è un file. * Ho capito che sei un programmatore MS? Sembrano sempre a disagio con questo concetto. –

+1

L'accesso/proc è il modo linux per farlo. Non tutti gli Unix hanno questa caratteristica (per quanto sia bello). – dmckee

+0

@dmckee: RHEL4 sì, e questo è il requisito di @jcs –

risposta

11

Se si vuole veramente un'usare l'interfaccia c getloadavg(), che funziona anche in Unix, senza /proc.

Ha un man page con tutti i dettagli.

+1

. Nonostante l'alto soffio del "modo unix", questo è davvero il modo portatile per farlo. Su Linux, ovviamente, è solo una funzione di libreria in cima a una lettura di/proc. –

+0

Il carico medio è _non_ una rappresentazione del carico della CPU. Per carico della CPU, intendo quanti camerieri sono occupati nel tuo ristorante. Il carico medio ti dà il numero di clienti che aspettano fuori per sedersi + il numero di clienti che stanno attualmente mangiando. Questa non è la cosa _same_. Credo che l'utilizzo di '/ proc/stat' sia più rilevante qui. –

1

La mia comprensione è che l'analisi del contenuto di/proc è l'interfaccia ufficiale per quel genere di cose (ci sono un certo numero di file che devono essere analizzati prima di essere presentati all'utente).

7

Il metodo preferito per ottenere informazioni su carico della CPU su Linux è di leggere da /proc/stat, /proc/loadavg e /proc/uptime. Tutte le normali utility linux come top utilizzano questo metodo.

2

dal proc (5) man page:

/proc/loadavg 
      The first three fields in this file are load average figures 
      giving the number of jobs in the run queue (state R) or waiting 
      for disk I/O (state D) averaged over 1, 5, and 15 minutes. They 
      are the same as the load average numbers given by uptime(1) and 
      other programs. The fourth field consists of two numbers sepaâ 
      rated by a slash (/). The first of these is the number of curâ 
      rently executing kernel scheduling entities (processes, 
      threads); this will be less than or equal to the number of CPUs. 
      The value after the slash is the number of kernel scheduling 
      entities that currently exist on the system. The fifth field is 
      the PID of the process that was most recently created on the 
      system. 
1

"Load average" potrebbe non essere molto utile. Troviamo che sia di uso limitato, in quanto in realtà non ti dice quanta CPU viene utilizzata, ma solo il numero medio di attività "pronte per essere eseguite". "Ready to run" è in qualche modo soggettivo, ma non molto utile in quanto include spesso processi in attesa di IO.

Su sistemi occupati, vediamo un carico medio di 20+ su macchine con solo 8 core, e ancora le CPU sono relativamente inattive.

Se si vuole vedere ciò che CPU è in uso, avere uno sguardo ai vari file in/proc

Problemi correlati