GNU/Linux, Open Source, Cloud Computing, DevOps y más...

Cómo saber cuántos procesadores y núcleos tiene una máquina Linux

17 comentarios

El método más sencillo para saber el número de procesadores presentes en una máquina Linux es el siguiente:

$ nproc --all
8

Otra forma de obtener el mismo resultado, el cual también nos permite obtener información adicional sobre nuestro procesador es el comando lscpu:

$ lscpu | grep 'CPU(s)'
CPU(s):                8
On-line CPU(s) list:   0-7
NUMA node0 CPU(s):     0-7

O también podemos examinar el fichero cpuinfo del sistema de ficheros /proc:

$ grep processor /proc/cpuinfo | wc -l
8

Podemos encontrar numerosos detalles adicionales sobre nuestros procesadores en /proc/cpuinfo, entre ellos el modelo de CPU y el número de núcleos o cores que tiene:

$ cat /proc/cpuinfo | grep "model name"
model name	: Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz
model name	: Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz
$ cat /proc/cpuinfo | grep "cpu cores"
cpu cores	: 4
cpu cores	: 4

Como puedes ver, la máquina del ejemplo tiene 2 procesadores con 4 cores cada uno.

Lectura recomendada:
  Diferencias entre CPU física, CPU lógica, Core/Núcleo, Thread/Hilo y Socket

Debido a la tecnología HyperThreading y otras mejoras de los procesadores podemos necesitar diferenciar entre CPUs físicas y lógicas:

# Obtener el número de cpus/cores físicos:
$ lscpu -p | egrep -v '^#' | wc -l
4
# Obtener el número de cpus lógicas (incluyendo aquellos cores con HT):
$ lscpu -p | egrep -v '^#' | sort -u -t, -k 2,4 | wc -l
8

El equivalente de los anterior para Mac OS X:

# Obtener el número de cpus/cores físicos:
$ sysctl -n hw.physicalcpu_max
4
# Obtener el número de cpus lógicas (incluyendo aquellos cores con HT):
$ sysctl -n hw.logicalcpu_max
8

Otro método portable que funciona en ordenadores antiguos, tanto Linux como Mac OS X, que no tienen disponibles los comandos nproc o lscpu es utilizar el comando getconf:

$ getconf _NPROCESSORS_ONLN
8

También podemos utilizar herramientas alternativas para obtener información del hardware de nuestra máquina como dmidecode, pero necesitaremos privilegios de root:

# dmidecode -t 4 | egrep 'Socket Designation|Count'
        Socket Designation: CPUSocket
        Core Count: 8
        Thread Count: 8

Si de la información anterior se desprende que tenemos una máquina con varias CPUs o varios núcleos, querremos también asegurarnos de que el kernel de Linux que corre en dicha máquina tiene soporte multiprocesador (SMP, Symmetric MultiProcessing):

# uname -a
Linux sasser 2.6.18-028stab092.1 #1 SMP Wed Jul 20 19:47:12 MSD 2011 i686 GNU/Linux


 

Sobre el autor

Daniel López Azaña
Arquitecto de soluciones Cloud

Emprendedor, generador de ideas y mente inquieta. Apasionado de las nuevas tecnologías, especialmente de los sistemas Linux y del software libre. Me gusta escribir además sobre actualidad tecnológica, Cloud Computing, DevOps, seguridad, desarrollo web y programación, SEO, ciencia, innovación, emprendimiento, etc.

DanielCómo saber cuántos procesadores y núcleos tiene una máquina Linux

Artículos relacionados

17 comentarios

Unirte a la conversación
  • Juan Alberto - 30/08/2015 responder

    Gracias por compartir el conocimiento, me fue de mucha ayuda

  • jesica - 14/03/2016 responder

    buenas tardes quisiera saber cuanta memoria,procesadores y bancos de memoria necesita la virtualizacion de 6 maquinas como:
    manejo de correo
    bases de datos
    seguridad perimetral
    administrar
    haga backup
    haga root

    Daniel - 05/05/2016 responder

    Lo siento Jesica, no se puede dimensionar una máquina sin saber muchos más detalles: ¿cuántas bases de datos tendrá el servidor de bases de datos? ¿Qué tamaño tendrán cada una de ellas? ¿Cuántos usuarios simultáneos accederán? ¿Cuántos dominios de correo tendrá que manejar el servidor de correo? ¿Cuántos buzones tendrá cada dominio? ¿Cuál es el tamaño, la cantidad y frecuencia de los backups que necesitas realizar? Etc., etc., etc. Te recomiendo que utilices un servicio de cloud computing como Amazon Web Services (AWS) o similar, de forma que puedas ir dimensionando cada uno de tus servicios bajo demanda.

  • Bill - 23/06/2016 responder

    Estimado, Tengo esta maquina
    Linux SR5S2 2.6.16.60-0.103.1-smp #1 SMP Thu May 16 19:52:34 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux –

    Y quisiera saber:
    1.- Comando para saber CPUs virtuales tengo (si los hay)

    La cantidad de CPU fisicos los se por comando “grep -i processor /proc/cpuinfo | wc -l”

    Gracias de antemano por tu apoyo

    Bill

    Daniel - 27/06/2016 responder

    Hola Bill, si tu máquina es virtual la ejecución de ese comando te dirá el nº de CPU’s virtuales o vCPU que tiene asignada dicha máquina virtual, que puede coincidir o no con el nº de CPU’s físicas que tiene la máquina host. En cualquier caso, desde la máquina virtual no puedes saber ese número, desde ella no se puede distinguir si son vCPUs o no, para ella es como si fueran físicas. Eso tendrías que consultarlo en la máquina host que contiene a la máquina virtual.

  • Diana - 28/07/2016 responder

    Buenas tardes.. una pregunta.
    Hago un INSERT a la base pero al momento que lo ejecuto mi maquina tiene 4 procesadores 8 nucleos entonces lo que quiero es que la consulta se vaya a los 4 micro para que los 8 nucleos los procese. Como lo haria?

    Daniel - 29/07/2016 responder

    Diana, creo que para que un único INSERT se puede dividir entre varios cores tienes que activar la opción de multithreading en tu base de datos (si no la trae activada ya por defecto), y debes particionar las tablas implicadas. En cualquier caso, depende del motor de base de datos que utilices. Aquí te dejo algunos enlaces que te pueden resultar interesantes:

    https://www.percona.com/blog/2014/05/01/parallel-query-mysql-shard-query/
    http://docs.oracle.com/cd/A87860_01/doc/server.817/a76965/c22paral.htm
    http://dba.stackexchange.com/questions/64657/does-sql-server-allow-inserts-into-tables-and-indexes-to-be-written-in-parallel

    Dark ange - 19/10/2016 responder

    Hola
    Yo necesito algo parecido pero que todos los procesos sean divididos en los nucleos de mu computador

    Daniel - 19/10/2016 responder

    A menos que el software esté específicamente diseñado para ello, normalmente un proceso no puede correr en más de un núcleo al mismo tiempo, por lo que entiendo entonces que te refieres a que tu aplicación está diseñada para levantar varios procesos y que estos se coordinen entre sí para llevar a cabo una tarea concurrentemente y de forma colaborativa, o para que cada uno realice su tarea de forma independiente. Si es así no tienes que hacer nada especial. El sistema operativo se encargará por si mismo de planificar la ejecución de la forma más eficiente posible usando todos los núcleos que tenga a su disposición. Sí es posible que tengas que decirle a tu aplicación a través de un fichero de configuración cuántos procesos quieres que se levanten en función del número de núcleos de tu máquina, como por ejemplo en la configuración de Nginx:
    worker_processes 4; # 2 * Number of CPUs

  • sebastian - 11/08/2016 responder

    como se cuantos procesadores consume mi instancia de base de datos

    Daniel - 11/08/2016 responder

    Depende del motor de base de datos que utilices, aunque en este enlace puedes encontrar varios métodos para tratar de saberlo a nivel de procesos del sistema operativo: http://ask.xmodulo.com/cpu-core-process-is-running.html.

  • Berto - 09/09/2016 responder

    Buenas, como puedo saber la capacidad disponible a nivel de cores y memoria? Un saludo.

    Daniel - 19/10/2016 responder

    Berto, la información sobre la carga de la máquina (load average) que proporciona el comando uptime o top facilita esta información. A grandes rasgos lo ideal es que la carga no supere 1 punto por cada core disponible. Es decir, una máquina con 4 cores que esté trabajando a una carga de 4.00 estaría al 100% de su capacidad a nivel de CPU. Por encima de ese número la máquina tendría una carga mayor a la que puede asumir y tendrás problemas. Por debajo de ese nivel tendrías parte de su capacidad de procesamiento desocupada (idle).

    La capacidad de memoria la puedes conocer con el comando free -h o con el comando top.

  • George - 23/11/2016 responder

    Buenas Tardes,
    quisiera saber con que comando puedo ver el numero de procesadores fisicos y logicos en una plataforma VMware ESXi, ya que con el comando “”grep -i processor /proc/cpuinfo | wc -l””
    me arroja el numero 32.
    gracias de antemano.

    Julio Cesar Díaz - 04/01/2017 responder

    Esos datos los puedes ver directamente desde tu administrador vCenter o con el cliente vSphere por supuesto con un usuario que tenga los privilegios suficientes, ahí te da toda la información que requieres, CPU físicos y virtuales, memoria total, almacenamientos, etc. siempre y cuando este bien conformado el cluster de servidores con el licenciamiento de VMware. Saludos.

  • Juan Manuel - 10/03/2017 responder

    Hola.

    Con las instrucciones que das puedo ver los CPU’s físicos y los CORES de cada CPU, pero no se cómo puedo los THREADS por cada CORE. ¿Esto es posible en Linux?
    Gracias de antemano por tu atención.

    Daniel - 23/05/2017 responder

    Sí, es posible. He ampliado el artículo para explicar mejor cómo hacer esto.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *