Cómo localizar el problema del alto consumo de CPU en Java
Como se puede ver en la figura anterior, el consumo de CPU del proceso Java 27459 es relativamente alto.
En segundo lugar, busque el ID del subproceso de CPU consumido por el proceso Java 27459
Método 1: top -p [pid] o top -H -p [pid].
Después de ejecutar el comando, presione shift+h (muestra el estado de ejecución de cada hilo en el proceso)
1), top -p 27459
2 ), shift + h
Como se muestra en la siguiente figura:
Método 2: PS-MP [PID]-othhread, tid, time.
ps -mp 27459 -o thread, tid, time
Modo 3: pidstat -p [pid] -t 1
pidstat -p 27459 -t 1
Nota: El comando pidstat requiere que esté instalado el paquete de software sysstat.
Como se puede ver en los tres métodos anteriores, el hilo con PID 27460 ocupa una CPU más alta.
3. Encuentre el ID del hilo correspondiente según la información de la pila del proceso Java.
3.1, el ID del hilo correspondiente se convierte en 16 procesos printf "% x \n" [tid]
27460 = 0x6b44
3.2.jstack [pid ] o jstack [pid] | grep [tid] -A 30
jstack 27460 & gt& gt27460.log
Busque el hilo correspondiente a 0x6b44 en el archivo 27460.log, como se muestra a continuación:
Observaciones:
Para la información de la pila generada por 1 y jstack, el 16 hexadecimal correspondiente al ID del hilo está en minúsculas y la búsqueda debe realizarse en minúsculas.
2. La salida de jstack es la información de la pila en el momento actual. Si la intermitencia de la CPU es alta, necesita generar más veces.
Del método anterior, se encuentra que el código Test.main(Test.java:4) causa el problema de CPU alta, así que echemos un vistazo a cómo se implementa el código.
Implementación del código:
Prueba de clase pública {
Public static void main(String[] args) {
while(true) {
}
}
}
Desde el nivel de código, aquí se implementa un bucle infinito, lo que resulta en un alto uso de CPU por parte de Problema de hilos.