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

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

26 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


Error: Your Requested widget " ai_widget-6" is not in the widget list.
  • [do_widget_area above-nav-left]
    • [do_widget_area above-nav-right]
      • [do_widget_area footer-1]
        • [do_widget id="wpp-4"]
      • [do_widget_area footer-2]
        • [do_widget id="recent-posts-4"]
      • [do_widget_area footer-3]
        • [do_widget id="recent-comments-3"]
      • [do_widget_area footer-4]
        • [do_widget id="archives-4"]
      • [do_widget_area logo-bar]
        • [do_widget id="oxywidgetwpml-3"]
      • [do_widget_area menu-bar]
        • [do_widget id="search-3"]
      • [do_widget_area sidebar]
        • [do_widget id="search-4"]
        • [do_widget id="ai_widget-2"]
        • [do_widget id="categories-5"]
        • [do_widget id="ai_widget-3"]
        • [do_widget id="ai_widget-4"]
        • [do_widget id="ai_widget-5"]
      • [do_widget_area sub-footer-1]
        • [do_widget id="text-4"]
      • [do_widget_area sub-footer-2]
        • [do_widget_area sub-footer-3]
          • [do_widget_area sub-footer-4]
            • [do_widget_area upper-footer-1]
              • [do_widget id="search-2"]
              • [do_widget id="recent-posts-2"]
              • [do_widget id="recent-comments-2"]
              • [do_widget id="archives-2"]
              • [do_widget id="categories-2"]
              • [do_widget id="meta-2"]
            • [do_widget_area upper-footer-2]
              • [do_widget_area upper-footer-3]
                • [do_widget_area upper-footer-4]
                  • [do_widget_area widgets_for_shortcodes]
                    • [do_widget id="search-5"]
                    • [do_widget id="ai_widget-6"]
                  • [do_widget_area wp_inactive_widgets]
                    • [do_widget id="wpp-2"]
                    • [do_widget id="text-1"]
                    • [do_widget id="recent-posts-3"]
                    • [do_widget id="categories-3"]
                    • [do_widget id="archives-3"]
                    • [do_widget id="icl_lang_sel_widget-3"]

                  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 AWS & Linux Sysadmin Freelance

                  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, AWSi, DevOps, DevSecOps, 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

                  26 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.

                  • Tati - 15/05/2018 responder

                    Hola chico cuando hice el lscpu me salio algo curioso la arquitectura es de i686
                    Com es posible 64 bit si es de 32?
                    CPU op-mode(s): 32-bit, 64-bit
                    Byte Order: Little Endian
                    CPU(s): 4
                    On-line CPU(s) list: 0-3
                    Thread(s) per core: 1
                    Core(s) per socket: 4
                    Socket(s): 1

                    cat /proc/cpuinfo | grep «model name»
                    model name : Intel(R) Celeron(R) CPU
                    model name : Intel(R) Celeron(R) CPU
                    model name : Intel(R) Celeron(R) CPU
                    model name : Intel(R) Celeron(R) CPU …

                    cat /proc/cpuinfo | grep «cpu cores»
                    cpu cores : 4
                    cpu cores : 4
                    cpu cores : 4
                    cpu cores : 4

                    Socket Designation: CPU 1
                    Core Count: 4
                    Thread Count: 1

                    Daniel - 15/05/2018 responder

                    Probablemente en tu máquina está corriendo un Kernel de Linux de 32 bits aunque tu procesador sea de 64 bits.

                  • Manuel - 12/09/2018 responder

                    Hola, en un Oracle Linux ejecuto el comando «dmidecode» y me arroja que tiene 2 socket, cada uno con 12 Core. Sin embargo, si le hago un «grep processor» me indica 48.

                    dmidecode -t 4 | egrep ‘Socket Designation|Count’
                    Socket Designation: P0
                    Core Count: 12
                    Thread Count: 24
                    Socket Designation: P1
                    Core Count: 12
                    Thread Count: 24

                    cat /proc/cpuinfo | grep «cpu cores» |wc -l
                    48

                    grep processor /proc/cpuinfo | wc -l
                    48

                    Daniel - 12/09/2018 responder

                    Tus procesadores tienen HyperThreading. Echa un vistazo a la lectura recomendada que pongo en el artículo: https://www.daniloaz.com/es/diferencias-entre-cpu-fisica-cpu-logica-core-nucleo-thread-hilo-y-socket/

                  • Marcos - 27/03/2019 responder

                    Hola
                    Mande un job con el siguiente script:
                    #PBS -N Name
                    #PBS -l nodes=1:ppn=40
                    #PBS -l mem=20gb

                    cd $PBS_O_WORKDIR

                    pero al momento de visualizar el numero de procesadores en uso, solo esta en uso 1 al 100%. Como hago para que trabaje con todos los procesadores que se indique.

                    Daniel - 27/03/2019 responder

                    Hola Marcos, supongo que te refieres al PBS job scheduler de ARC. Si es así creo que tienes que especificar el número de procesos a ejecutar en cada nodo con mpiprocs=16, por ejemplo, para aprovechar los 16 cores que tiene cada nodo de un cluster arcus-b.

                  • Gustavo Abarca - 20/08/2020 responder

                    Buenas noches quisiera saber que comando puedo usar para ver el consumo(%) por cada core de memoria .
                    eje:
                    core memoria
                    00 371695616
                    01 373268480

                    Daniel - 14/10/2020 responder

                    Hola Gustavo, un core no consume memoria, la consumen los procesos que corren en cada momento en dicho core.

                  • Arturo - 24/02/2023 responder

                    Tenemos un Servidor con Intel(R) Xeon(R) CPU E5-2683 v4 @ 2.10GHz, 64 cores donde esta configurado un SMB al que se conectan 25 usuarios simultaneos y trabajan archivos de diseño como Indd ps y ai desde sus iMacs…
                    En ocaciones se saturan lo valores de CPU load averages y se vuelve un fastidio que puedan abir o guardar archivos. los valores con un funcionamiento percibido como optimo para los users es de
                    0.60 (1 min) 1.63 (5 mins) 2.88 (15 mins)
                    pero cuando tenemos una carga de llamadas y nadie puede trabajar y el sistema pasa a valores que llegan a esto
                    10.53 (1 min) 11.56 (5 mins) 8.16 (15 mins)
                    Alguna idea de como podemos asignar recursos para bajar el estres en la carga cuando ocurre esto.
                    de antemano muchas gracias

                  Deja una respuesta

                  Tu dirección de correo electrónico no será publicada.