Varias utilidades Linux como top se basan en el archcivo proc/stat.
cpu 653281 5306 65450 37546284 22361 6081 133382 0 cpu0 311182 2356 25454 18868835 5437 5 2809 0 cpu1 342099 2949 39995 18677448 16923 6075 130573 0 intr 213314641 192217840 3 0 0 14 0 3 0 1 1 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4091873 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14530481 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2473265 0 0 0 0 0 0 0 1149 0 0 0 0 0 0 0 7 0 0 0 0 0 ctxt 146081806 btime 1462772668 processes 29494 procs_running 1 procs_blocked 0
Vamos a fijarnos en las primeras tres línas de este ficho.
En este caso hay dos CPUs: cpu0 y cpu1. La primera línea es la suma de de las dos cpus.
Estas cifras indican la cantidad de tiempo (normalmente centésimas de segundo) que la cpu tarda en realizar los diferentes tipos de procesos.
Cada columna es un grupo de procesos, empezando por la segunda:
1st column : user = normal processes executing in user mode
2nd column : nice = niced processes executing in user mode
3rd column : system = processes executing in kernel mode
4th column : idle = twiddling thumbs
5th column : iowait = waiting for I/O to complete
6th column : irq = servicing interrupts
7th column : softirq = servicing softirqs
Se cumple que (user + nice + system + idle + iowait + iowait + irq + softirq) son el 100% de procesador por lo que se puede hacer una simple regla de tres para calcular por ejemplo el porcentaje de cpu libre:
user+nice+system+idle+iowait+iowai+irq+softirq = 100
idle = X%
por lo que el porcentaje de cpu disponible será:
( idle * 100 ) / ( user + nice + system + idle + iowait + irq + softirq )
Por lo que en linux podemos hacer para saber el porcentaje libre de la cpu1:
[root@gestionRed Monitor]# cat /proc/stat | grep cpu1 | awk '{print ($5*100)/($1+$2+$3+$4+$5+$6+$7+$8)}' 97,2134
Si lo que queremos saber es el uso de cpu podemos simplemete restarle a 100 el porcentaje de idle:
[root@gestionRed Monitor]# cat /proc/stat | grep cpu1 | awk '{print 100-(($5*100)/($1+$2+$3+$4+$5+$6+$7+$8))}' 2,78343