Comando de ubicación de problemas de Linux
1. La situación general
【1】 arriba
Utilice este comando para ver la CPU del sistema, la carga, etc.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2014 root 20 0 2653m 28m 10m S 100.1 1.5 8:44.59 java
Verifique el proceso con la tasa de utilización de CPU más alta, puede ver que es un programa Java
load average: 1.00, 0.80, 0.42
La esquina superior derecha es la situación de carga del sistema, que representa respectivamente 1 minuto, 5 minutos y 15 minutos de muestreo. Si la suma de estos valores se divide por 3 y luego se multiplica por 100%, excede el 60%, que significa que la carga actual del sistema está bajo presión
【2】 tiempo de actividad
top
Versión corta del comando
21:09:18 up 15 min, 2 users, load average: 1.00, 0.89, 0.53
Este comando es principalmente capaz de ver la carga de la máquina.
2. Estado de la CPU
【1】 vmstat
gramática vmstat -n 采样时间间隔 采样次数
Por ejemplo: vmstat -n 2 3
muestreo una vez cada 2 segundos, un total de 3 muestras
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 1645680 18376 153000 0 0 68 2 413 44 39 0 61 0 0
1 0 0 1645600 18376 153000 0 0 0 0 1031 56 50 0 50 0 0
1 0 0 1645600 18376 153000 0 0 0 0 1030 58 50 0 50 0 0
A través de este comando, puede ver cierta información del sistema, incluida la CPU
procs:
- r: El número de procesos en ejecución y esperando el intervalo de tiempo de la CPU, el número no debe exceder 2 veces el número total de núcleos, de lo contrario significa que el sistema está bajo alta presión.
- b: El número de procesos en espera de recursos, incluida la E / S de disco en espera, la E / S de red en espera, etc.
UPC:
- us: uso de CPU de procesos de usuario
- sy: uso de CPU de los procesos del sistema
- id: porcentaje de CPU libre
- wa: porcentaje de CPU en espera de E / S de recursos
Si el valor de us + sy es superior al 80%, el uso de la CPU puede ser demasiado alto
【2】 mpstat
gramática mpstat -P ALL 采样时间间隔 采样次数
Por ejemplo: mpstat -P ALL 2 3
muestreo una vez cada 2 segundos, un total de 3 muestras
Linux 2.6.32-642.el6.x86_64 (???) 2019年??月??日 _x86_64_ (2 CPU)
21时30分07秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
21时30分09秒 all 50.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 50.00
21时30分09秒 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21时30分09秒 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
21时30分09秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
21时30分11秒 all 50.12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 49.88
21时30分11秒 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21时30分11秒 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
21时30分11秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
21时30分13秒 all 50.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 50.00
21时30分13秒 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
21时30分13秒 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均时间: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
平均时间: all 50.04 0.00 0.00 0.00 0.00 0.00 0.00 0.00 49.96
平均时间: 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Se puede ver que la CPU de esta máquina es de doble núcleo. Uno de ellos (CPU0) tiene una tasa de uso del usuario (% usr) del 100,00% y la tasa de inactividad (% inactivo) es del 0,00%, lo que muestra que el La presión actual de la CPU de la máquina es muy alta.
【3】 pidstat
gramática pidstat -p 进程号 -u 采样间隔 采样次数
P.ej:
Nos ps -ef|grep java
comando para obtener al proceso del programa Java ID 2014
root 2014 1981 99 20:58 pts/0 00:44:03 java A
Vuelva pidstat -p 2014 -u 2 3
a pasar para obtener el uso de CPU del programa
Linux 2.6.32-642.el6.x86_64 (???) 2019年??月??日 _x86_64_ (2 CPU)
21时44分03秒 PID %usr %system %guest %CPU CPU Command
21时44分05秒 2014 100.00 0.00 0.00 100.00 1 java
21时44分07秒 2014 100.00 0.00 0.00 100.00 1 java
21时44分09秒 2014 100.00 0.00 0.00 100.00 1 java
平均时间: 2014 100.00 0.00 0.00 100.00 - java
Puede ver que el uso actual de CPU del programa ha alcanzado el 100,00% (% usr)
[4] Alto uso de CPU en combate real
top
Para ver%CPU
el proceso más altoPID
ps -mp 进程ID -o THREAD,tid,time
, Ver el hilo específicoTID
- -m: muestra todos los hilos
- -o: muestra el formato especificado por el usuario
- -p ID de proceso: muestra el tiempo que el proceso usa la CPU
- El hilo TID en decimal,
转换为十六进制
el hilo TID y debe estar en minúsculas jstack 进程ID | grep 十六进制线程ID -A显示的行数
, Ver la información de la pila del hilo especificado, el número de líneas especificado anteriormente
Ejemplo:
public class HighCpu {
public static void main(String[] args) {
for (;;) {
}
}
}
Código de problema
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3619 root 20 0 2653m 22m 10m S 100.1 1.1 0:10.39 java
[1] El ID del proceso de la vista superior es 3619
ps -mp 3619 -o THREAD,tid,time
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
root 98.9 - - - - - - 00:00:25
root 0.0 19 - futex_ - - 3619 00:00:00
root 98.8 19 - - - - 3620 00:00:25
root 0.0 19 - futex_ - - 3621 00:00:00
root 0.0 19 - futex_ - - 3622 00:00:00
root 0.0 19 - futex_ - - 3623 00:00:00
root 0.0 19 - futex_ - - 3624 00:00:00
root 0.0 19 - futex_ - - 3625 00:00:00
root 0.0 19 - futex_ - - 3626 00:00:00
root 0.0 19 - futex_ - - 3627 00:00:00
root 0.0 19 - futex_ - - 3628 00:00:00
root 0.0 19 - futex_ - - 3629 00:00:00
root 0.0 19 - futex_ - - 3630 00:00:00
[2] Ver el ID de hilo específico como 3620
[3] Convierta 3620 a hexadecimal, minúsculas, a saber: e24
jstack 3619 | grep e24 -A50
"main" #1 prio=5 os_prio=0 tid=0x00007f7f24009000 nid=0xe8f runnable [0x00007f7f28d08000]
java.lang.Thread.State: RUNNABLE
at ???.HighCpu.main(HighCpu.java:3)
"VM Thread" os_prio=0 tid=0x00007f7f24073000 nid=0xe92 runnable
"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007f7f2401e000 nid=0xe90 runnable
"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00007f7f24020000 nid=0xe91 runnable
"VM Periodic Task Thread" os_prio=0 tid=0x00007f7f240d7000 nid=0xe99 waiting on condition
JNI global references: 5
[4] A través del comando jstack, verifique las primeras 50 líneas del código ejecutado por el hilo e24 y podrá ver que el código del problema está en la línea 3 del archivo HighCpu.java
3. Estado de la memoria
【1】 gratis
gramática free -m
Por ejemplo: free -m
use MB como unidad para ver el uso de memoria
total used free shared buffers cached
Mem: 1990 562 1427 1 51 276
-/+ buffers/cache: 234 1756
Swap: 2047 0 2047
Puede ver que la memoria física es de 2 GB y se han utilizado 562 MB. 2 GB de memoria de intercambio, sin usar
La aplicación ocupa memoria / memoria física, lo cual es razonable al 20% ~ 70%
【2】 pidstat
gramática pidstat -p 进程号 -r 采样间隔 采样次数
Por ejemplo :, pidstat -p 4526 -r 2 3
ver el uso de memoria del proceso 4526
Linux 2.6.32-642.el6.x86_64 (???) 2019年??月??日 _x86_64_ (2 CPU)
22时31分18秒 PID minflt/s majflt/s VSZ RSS %MEM Command
22时31分20秒 4526 0.00 0.00 2716884 262204 12.86 java
22时31分22秒 4526 0.00 0.00 2716884 262204 12.86 java
22时31分24秒 4526 271.50 0.00 2716884 299048 14.67 java
平均时间: 4526 90.50 0.00 2716884 274485 13.47 java
Puede ver que el uso de memoria del programa ha alcanzado el 14,67%
4. Estado del disco
【1】 gl
Use comandos df -h
para ver el uso del disco y el estado restante
P.ej:
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 4.3G 13G 26% /
tmpfs 996M 72K 996M 1% /dev/shm
/dev/sda1 190M 39M 142M 22% /boot
Puede ver el área de inicio del sistema (el punto de montaje es / boot), un total de 190 MB, 39 MB (aproximadamente 22%) usados y 142 MB restantes
El directorio raíz (el punto de montaje es /), un total de 18 GB, 4,3 GB (aproximadamente 26%) utilizados y 13 GB restantes
【2】 iostat
Sintaxis iostat -dkx 采样间隔 采样次数
, puede ver el estado de E / S del disco
- -d: muestra el estado de uso del dispositivo (disco)
- -k: muestra la salida del disco en KB
- -x: incluye métricas de disco expandidas en la salida
Este comando se puede usar con lsblk
comandos (enumere todos los dispositivos de bloque y muestre las dependencias entre ellos)
P.ej:lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17.8G 0 part /
Por ejemplo: iostat -dkx 1 3
para ver el estado actual de E / S del disco
Linux 2.6.32-642.el6.x86_64 (???) 2019年??月??日 _x86_64_ (2 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.88 0.52 2.20 0.36 41.71 3.52 35.35 0.00 0.96 0.90 1.32 0.78 0.20
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Necesito prestar atención a varios parámetros:
- rkB / s: la cantidad de gigabytes leídos por segundo
- wkB / s: la cantidad de gigabytes escritos por segundo
- await: tiempo de respuesta del disco, el tiempo medio de espera (milisegundos) para cada operación de E / S de dispositivo. Cuanto menor sea el tiempo, mejor
- % util: qué porcentaje de los segundos del intervalo de tiempo estadístico se utiliza para operaciones de E / S, es decir, el valor = tiempo de operación de E / S del dispositivo / tiempo de intervalo estadístico. Por lo tanto, este valor implica qué tan ocupado está el dispositivo. Si el valor es 100%, significa que el dispositivo está funcionando a plena capacidad (si son varios discos, debido a la simultaneidad del disco, el uso del disco puede no haber alcanzado el embotellamiento)
【3】 pidstat
gramática pidstat -p 进程ID -d 采样间隔 采样次数
Nota: El parámetro -d solo está disponible para kernel 2.6.20 y versiones posteriores . Puede uname -r
ver la información del número de versión del kernel a través de
P.ej:
2.6.32-642.el6.x86_64
Puede ver que la versión del kernel es 2.6.32
P.ej:pidstat -p 4969 -d 1 3
Linux 2.6.32-642.el6.x86_64 (???) 2019年??月??日 _x86_64_ (2 CPU)
23时30分41秒 PID kB_rd/s kB_wr/s kB_ccwr/s Command
23时30分42秒 4969 0.00 0.00 0.00 java
23时30分43秒 4969 0.00 0.00 0.00 java
23时30分44秒 4969 0.00 0.00 0.00 java
平均时间: 4969 0.00 0.00 0.00 java
Puede ver la cantidad de gigabytes leídos por segundo (kB_rd / s) y la cantidad de gigabytes que se han completado o se escribirán (kB_wr / s)
5. Estado de la red
ifstat
Tenga en cuenta que este comando no viene con un sistema Linux, necesitamos el sitio web oficial para descargarlo, compilarlo e instalarlo
La última versión es v1.1-01 / 01/2004 "The Happy New Year Release"
-rwxr-xr-x. 1 root root 67920 10月 5 23:57 ifstat-1.1.tar.gz
gramática ifstat -a 采样间隔 采样次数
Supervise todos los puertos de red, incluido el puerto de bucle invertido (lo)
P.ej:ifstat -a 1 3
lo eth0
KB/s in KB/s out KB/s in KB/s out
0.00 0.00 0.06 0.18
0.00 0.00 0.06 0.13
0.00 0.00 0.06 0.13
Puede ver el volumen de lectura (KB / s de entrada) y el volumen de lectura (KB / s de salida) de la tarjeta de red eth0 por segundo