00. ¿Qué es la CPU?
La unidad central de procesamiento (CPU, unidad central de procesamiento) es un circuito integrado a gran escala, que es el núcleo y la unidad de control de una computadora. Su función es principalmente interpretar instrucciones de computadora y procesar datos en software de computadora.
De hecho, en pocas palabras, es el cerebro, un cerebro electrónico. En términos sencillos, la CPU de la computadora es equivalente al cerebro humano. Aunque no está al mando activamente, el comando se logra siguiendo las instrucciones colocadas en la memoria de la computadora. También realiza operaciones aritméticas, como sumas, restas, multiplicaciones, etc., y puede tomar decisiones y elecciones.
01. Conceptos relacionados
Número físico de CPU : el número de CPU realmente insertadas en la placa base, hay varios identificadores físicos que se pueden contar (identificación física)
[root@ufo ~]# grep 'physical id' /proc/cpuinfo|sort|uniq|wc -l
1
Número de núcleos por CPU : el número de conjuntos de chips que pueden procesar datos en una sola CPU, como de doble núcleo, de cuatro núcleos, etc. (núcleos de CPU)
[root@ufo ~]# grep 'cpu cores' /proc/cpuinfo|uniq|awk -F ':' '{print $2}'
4
Número de CPU lógicas : en circunstancias normales, el número de CPU lógicas = el número de CPU físicas × el número de cada núcleo . Si no son iguales, significa que la CPU del servidor admite la tecnología Hyper-Threading (HT en términos simples, puede hacer que el procesador Un núcleo juega un papel en el sistema operativo como dos núcleos. De esta manera, los recursos de ejecución disponibles para el sistema operativo se duplican, lo que mejora en gran medida el rendimiento general del sistema. En este momento, el número de CPU lógicas = el número de CPU físicas × Número de cada núcleo x2 )
[root@ufo ~]# cat /proc/cpuinfo| grep "processor"|wc -l
8
Número total de núcleos = número físico de CPU x número de núcleos por CPU
Número total de CPU lógicas = número de CPU físicas x número de núcleos por CPU física x número de hyperthreads
Guiones relacionados:
#!/bin/bash
physicalNumber=0
coreNumber=0
logicalNumber=0
HTNumber=0
logicalNumber=$(grep "processor" /proc/cpuinfo|sort -u|wc -l)
physicalNumber=$(grep "physical id" /proc/cpuinfo|sort -u|wc -l)
coreNumber=$(grep "cpu cores" /proc/cpuinfo|uniq|awk -F':' '{print $2}'|xargs)
HTNumber=$((logicalNumber / (physicalNumber * coreNumber)))
echo "****** CPU Information ******"
echo "Logical CPU Number : ${logicalNumber}"
echo "Physical CPU Number : ${physicalNumber}"
echo "CPU Core Number : ${coreNumber}"
echo "HT Number : ${HTNumber}"
echo "*****************************"
****** CPU Information ******
Logical CPU Number : 8
Physical CPU Number : 1
CPU Core Number : 4
HT Number : 2
*****************************
02. ¿Por qué la CPU supera el 100%?
Utilice el comando superior para ver el uso de la CPU del proceso. A veces se encuentra que el uso de CPU de un determinado proceso excede el 100%. P.ej:
top - 10:12:55 up 3 days, 13:09, 1 user, load average: 1.19, 0.87, 1.43
Tasks: 235 total, 1 running, 181 sleeping, 0 stopped, 1 zombie
%Cpu(s): 56.4 us, 2.6 sy, 0.0 ni, 40.5 id, 0.1 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem : 7868576 total, 1022508 free, 2635576 used, 4210492 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 4484128 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
15736 root 20 0 31840 1564 1412 S 199.0 0.0 0:46.34 samples_test
¿Por qué el% de CPU aquí excede el 100%? Incluso si la CPU sigue funcionando, es 100% como máximo. En este momento, debemos comprender el significado específico de este campo:
$ man top
......
1. %CPU -- CPU Usage
The task's share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time.
In a true SMP environment, if a process is multi-threaded and top is not operating in Threads mode, amounts greater than 100% may be reported. You toggle Threads mode with the `H' inter‐
active command.
Also for multi-processor environments, if Irix mode is Off, top will operate in Solaris mode where a task's cpu usage will be divided by the total number of CPUs. You toggle Irix/Solaris
modes with the `I' interactive command.
......
A continuación se muestran algunos conceptos :
SMP (Symmetric Multi-Processing), la estructura de multiprocesador simétrico, se caracteriza por una sola instancia de sistema operativo, que se ejecuta en varias CPU, cada una de las cuales tiene la misma estructura, compartiendo memoria y recursos.
Un proceso es un programa en ejecución, es decir, una vez que el programa se carga en la memoria y está listo para ejecutarse, es un proceso. El proceso es el concepto básico de asignación de recursos, la unidad básica de la operación de programación y la unidad de ejecución concurrente en el sistema.
Los subprocesos se ejecutan en un solo proceso para cada tarea es un subproceso. Un hilo es la unidad más pequeña para realizar operaciones en un proceso.
La relación entre el proceso y el hilo Un hilo solo puede pertenecer a un proceso, pero un proceso puede tener varios hilos. El multihilo es permitir que se ejecuten varias tareas al mismo tiempo en un proceso.
Dar una explicación:
El comando top muestra los datos del proceso ( modo de proceso ) de forma predeterminada . Si usa top -H, esta opción enumerará todos los subprocesos de Linux. Si top ya se está ejecutando, también puede cambiar el modo de subproceso presionando la tecla "H" , y el% de cpu de cada subproceso es hasta el 100%.
% CPU representa el porcentaje de tiempo de CPU desde la última actualización hasta el presente. En el entorno SMP real, si el proceso tiene varios subprocesos y se usa el modo predeterminado del comando superior para realizar consultas, el resultado puede ser superior al 100%.
En teoría, la CPU tiene un total de N núcleos , y el modo de proceso predeterminado de la parte superior puede mostrar hasta el límite superior N * 100% . Número total de núcleos N = número físico de CPU x número de núcleos por CPU (en la parte superior presione "1" para cambiar y ver el número de CPU lógicas, no el número total de núcleos, preste atención a la diferencia. Número total de CPU lógicas = número de CPU físicas x Número de núcleos por CPU física x número de hyperthreads)
top -H, o presione H después de que top esté funcionando para iniciar el modo hilo. Se puede ver que sample_test contiene al menos dos subprocesos con un alto uso de CPU, y el uso está cerca del 100%, pero no superará el 100%.
top - 10:13:40 up 3 days, 13:10, 1 user, load average: 1.88, 1.10, 1.49
Threads: 1018 total, 4 running, 961 sleeping, 0 stopped, 1 zombie
%Cpu(s): 56.8 us, 1.6 sy, 0.0 ni, 41.3 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 7868576 total, 1009804 free, 2643240 used, 4215532 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 4472252 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
15737 root 20 0 31840 1564 1412 R 99.3 0.0 1:07.91 samples_test
15738 root 20 0 31840 1564 1412 R 98.0 0.0 1:07.83 samples_test
top -H -p pid (pid que se encuentra en el modo de proceso superior), puede ver que el samples_test real tiene un total de tres subprocesos, de los cuales dos tasas de uso de cpu son particularmente altas y una es particularmente baja.
$ top -H -p 15736
top - 10:40:41 up 3 days, 13:37, 1 user, load average: 2.65, 2.75, 2.44
Threads: 3 total, 2 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 56.2 us, 2.2 sy, 0.0 ni, 41.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 7868576 total, 332464 free, 3167324 used, 4368788 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 3846852 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
15737 root 20 0 31840 1680 1528 R 99.3 0.0 17:27.23 samples_test
15738 root 20 0 31840 1680 1528 R 99.0 0.0 17:26.73 samples_test
15736 root 20 0 31840 1680 1528 S 0.0 0.0 0:00.00 samples_test
Puede usar el comando pstree para ver rápidamente la relación entre los subprocesos en el proceso:
$ pstree -p 15736
samples_test(15736)─┬─{
samples_test}(15737)
└─{
samples_test}(15738)
Se puede ver que el hilo con el número de hilo 15736 es el hilo principal (visto por primera vez en el modo de proceso) y la tasa de uso de la CPU es baja; mientras que los hilos 15737 y 15738 son subprocesos (como se ve en el modo de hilo) , la tasa de uso de la CPU es alta.
03. Referencias a varios casos con alto uso de CPU
[Proceso de solución que mysql ocupa más del 100% de la CPU]
https://blog.csdn.net/jimshen/article/details/78706538
[Solución que mysql ocupa una CPU particularmente alta]
https://yunwei365.blog.csdn.net/article/details/78835708?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute. pc_relevant_t0 .none-task-blog-BlogCommendFromBaidu-1.control