Daniel López Azaña

Tema

Social Media

Blog

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

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

cpu-cores

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
Daniel López Azaña

Sobre el autor

Daniel López Azaña

Emprendedor tecnológico y arquitecto cloud con más de 20 años de experiencia transformando infraestructuras y automatizando procesos.

Especialista en integración de IA/LLM, desarrollo con Rust y Python, y arquitectura AWS & GCP. Mente inquieta, generador de ideas y apasionado por la innovación tecnológica y la IA.

Artículos relacionados

fatrace command man page

Comando fatrace: cómo saber en tiempo real qué procesos escriben en un fichero

Normalmente es fácil saber cuál es el proceso o procesos que están escribiendo sobre un fichero dado en Linux, ya que o bien conocemos previamente su origen, por ejemplo el access_log de Apache, o bien podemos hallarlo fácilmente con los comandos fuser o lsof. Sin embargo, a veces nos ocurrirá que aunque conozcamos el origen o el cometido de un fichero, son tantas las aplicaciones que pueden estar haciendo uso de él simultáneamente, que es muy difícil saber cuál de ellas es la que más escribe o la que lo está haciendo en un momento determinado, lo cual nos resultaría muy útil para saber por ejemplo por qué un fichero de log está creciendo desmesuradamente o qué aplicación está haciendo un uso abusivo de nuestro sistema, ya sea por un fallo o de forma intencionada.

23 de junio de 2017
linux-penguin-inside-a-box-tar-gz

Los 15 comandos Linux más útiles para mantener sistemas de ficheros

Una de las tareas más frecuentes y tediosas del administrador de sistemas es evitar que se llenen los sistemas de ficheros de una máquina, pues cuando un servidor se queda sin espacio las consecuencias son impredecibles. Dependiendo de cómo esté estructurado el sistema de ficheros raíz de dicha máquina y de la división entre distintas particiones o volúmenes que hayamos establecido, dichas consecuencias serán más o menos graves, pero en cualquier caso indeseables.

1 de octubre de 2014
hot-button-ssh-command-widget-icon

Control remoto de Linux desde tu smartphone con botones y widgets SSH

En este artículo voy a hablar de una app para Android que es extremadamente útil para ejecutar comandos de forma remota en un ordenador Linux: Hot Button SSH Command Widget. Esta aplicación nos permitirá lanzar cómodamente cualquier comando que se nos ocurra en un ordenador remoto a través de SSH con sólo pulsar un botón en la pantalla de nuestro móvil o tablet, lo cual no sólo nos facilitará la automatización de tareas repetitivas, sino que además resulta muy interesante desde el punto de vista de la seguridad por los mismos motivos que expuse en mi artículo Desbloqueo automático de pantalla por proximidad de dispositivo Bluetooth, ya que nos permitirá por ejemplo bloquear y desbloquear la pantalla sin tener que escribir nuestra contraseña una y otra vez a la vista de otras personas.

15 de julio de 2017

Comentarios

Juan Alberto 30 de agosto de 2015
Gracias por compartir el conocimiento, me fue de mucha ayuda
jesica 14 de marzo de 2016
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 5 de mayo de 2016
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 de junio de 2016
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 de junio de 2016
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 de julio de 2016
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 de julio de 2016
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 de octubre de 2016
Hola Yo necesito algo parecido pero que todos los procesos sean divididos en los nucleos de mu computador
sebastian 11 de agosto de 2016
como se cuantos procesadores consume mi instancia de base de datos
Daniel 11 de agosto de 2016
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 9 de septiembre de 2016
Buenas, como puedo saber la capacidad disponible a nivel de cores y memoria? Un saludo.
Daniel 19 de octubre de 2016
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 de noviembre de 2016
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 4 de enero de 2017
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 de marzo de 2017
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 de mayo de 2017
Sí, es posible. He ampliado el artículo para explicar mejor cómo hacer esto.
Tati 15 de mayo de 2018
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 de mayo de 2018
Probablemente en tu máquina está corriendo un Kernel de Linux de 32 bits aunque tu procesador sea de 64 bits.
Manuel 12 de septiembre de 2018
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 de septiembre de 2018
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 de marzo de 2019
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 de marzo de 2019
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 de agosto de 2020
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 de octubre de 2020
Hola Gustavo, un core no consume memoria, la consumen los procesos que corren en cada momento en dicho core.
Arturo 24 de febrero de 2023
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

Enviar comentario