2009-07-29 15 views
12

En Linux, ¿existe una función de biblioteca C incorporada para obtener la carga de la CPU de la máquina? Presumiblemente podría escribir mi propia función para abrir y analizar un archivo en/proc, pero parece que debería haber una mejor manera.C API para obtener carga de la CPU en Linux

  • no tiene por qué ser portátil
  • no debe requerir ninguna bibliotecas más allá de una instalación base RHEL4.
+1

Acceso/proc es la manera de hacer las cosas UNIX. * Todo es un archivo. * ¿Entiendo que eres un programador de MS? Siempre parecen incómodos con este concepto. –

+1

Acceder/proc es la forma de Linux para hacerlo. No todos los Unix tienen esa característica (aunque es bonita). – dmckee

+0

@dmckee: RHEL4 sí, y ese es el requisito de @jcs –

Respuesta

11

Si realmente desea una interfaz de uso c getloadavg(), que también funciona en sistemas Unix sin /proc.

Tiene un man page con todos los detalles.

+1

De hecho. A pesar de todo el resoplido anterior sobre la "manera Unix", esta es realmente la forma portátil de hacerlo. En Linux, por supuesto, es solo una función de biblioteca en la parte superior de una lectura/proc. –

+0

El promedio de carga no es una representación de la carga de la CPU. Por carga de CPU, me refiero a cuántos camareros están ocupados en su restaurante. El promedio de carga le da la cantidad de clientes esperando afuera para obtener asiento + número de clientes que comen actualmente. Esto no es lo mismo. Creo que usar '/ proc/stat' es más relevante aquí. –

1

Mi comprensión es que el análisis de los contenidos de/proc es la interfaz oficial para ese tipo de cosas (hay una serie de archivos que realmente deben analizarse antes de que se presenten al usuario).

7

El método preferido de obtener información sobre la carga de la CPU en Linux es para leer desde /proc/stat, /proc/loadavg y /proc/tiempo de actividad. Todas las utilidades normales de linux como top usan este método.

2

de la (5) página man proc:

/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

"Promedio de carga" puede no ser muy útil. Consideramos que tiene un uso limitado, ya que en realidad no indica la cantidad de CPU que se está utilizando, solo el número promedio de tareas "listas para ejecutarse". "Ready to run" es algo subjetivo, pero no muy útil, ya que a menudo incluye procesos que esperan IO.

En sistemas ocupados, vemos un promedio de carga de más de 20 en máquinas con solo 8 núcleos, y aún así las CPU están relativamente inactivas.

Si usted quiere ver lo que la CPU está en uso, echar un vistazo a los diversos archivos en/proc

Cuestiones relacionadas