[Comprobación de errores en línea] La CPU de la línea de servicio Java es 100% debido al bucle sin fin, y se verifica el posicionamiento del código.

Un servidor en la línea, la alarma de CPU de Alibaba Cloud se disparó al 100%, porque el volumen de negocios no es muy grande y la CPU generalmente es muy estable.
Según lo directo, la primera reacción es que hay un problema con la escritura del código de un hermano pequeño, causando un bucle infinito Siempre use CPU.
El entorno operativo del proyecto es Tomcat8, y el servicio se empaqueta directamente como un paquete de guerra y se lanza para ejecutarlo.

Sin más preámbulos, ingrese el tema,

1. Inicie sesión en el servidor
ssh ...

2. Ver el proceso ocupa recursos
Ingrese el comando arriba para ver los recursos de ocupación del proceso. Aquí puede ver el proceso con la ocupación más alta. Generalmente, la columna de la CPU mostrará que la ocupación excede el 100%.

Inserte la descripción de la imagen aquí

3. Verifique el subproceso en el proceso. Hemos encontrado el proceso, por lo que tenemos que entrar y ver qué subproceso está comiendo el recurso
superior -H -p 17123 (PID)

Inserte la descripción de la imagen aquí

4. Busque la ocupación de recursos más alta y cambie el id del subproceso a hexadecimal
printf "% x \ n" 15568

Inserte la descripción de la imagen aquí

5. Use jstack para ver la posición de funcionamiento del código de hilo
jstack 16466 (PID) | grep 47f8 (ID de hilo hexadecimal) -A 100

6. Localice la línea de código en el bucle sin fin y realice una revisión del código para ver por qué ocurre el bucle sin fin. Por supuesto, encontramos el problema en este momento. El servicio debe detenerse primero para evitar el consumo continuo de recursos para garantizar que los servicios en línea vuelvan rápidamente a la normalidad. Ejecute, y luego resuelva rápidamente el problema que causó el problema. Después de probar, reinicie la versión anterior del servicio.

Inserte la descripción de la imagen aquí

Debido a que fue un accidente de producción en ese momento, la captura de pantalla anterior fue simulada por el autor en privado. En ese momento, debido a que el proyecto tenía un algoritmo, era necesario sacar un conjunto de números que cumplieran con las reglas basadas en un número específico.
En ese momento, un colega escribió un método y mientras bucle para llamar hasta que obtenga un resultado satisfactorio y salte del bucle,

El riesgo es que el usuario ingrese este número. Nunca se sabe qué tipo de número ingresará el usuario, por lo que es posible que este número nunca produzca un resultado adecuado, por lo que ha estado en un bucle while,

Más tarde, el autor solucionó temporalmente este error agregando un contador. El número inicial de este contador es 100,000, y el ciclo se resta por 1 a la vez. Es decir, si no se obtiene el número apropiado después de ciclar 100,000 veces, saltará directamente y volverá a amistoso. El mensaje le indica al usuario que la operación falló.

El contenido principal de este artículo es solucionar este problema anormal de aumento de la CPU, no discutir si hay un mejor algoritmo para resolver el escenario empresarial en ese momento ~ Gracias por leer

Los siguientes son los problemas que puede encontrar al ejecutar el comando anterior

1. No se puede abrir el archivo de socket: el proceso de destino no responde o HotSpot VM no está cargado
Alguien en Internet dice que es el problema de tmp. La
solución real aquí: El proceso detrás de jstack no es la raíz del usuario actual, pero tomcat, debe cambiar a tomcat, ejecutar su Tomcat.

2. Esta cuenta no está disponible actualmente
Este error puede ocurrir al cambiar a usuarios de tomcat. En este momento, ejecute el siguiente comando
cat / etc / passwd | grep tomcat
lo encontrará. El script de shell aquí es / sbin / nologin,
así que vi / etc / passwd Cambie / sbin / nologin a / bin / bash, guarde y salga y cambie a tomcat nuevamente, muy bien.

Publicado 38 artículos originales · elogiado 17 · visita 9022

Supongo que te gusta

Origin blog.csdn.net/cainiao1412/article/details/98885073
Recomendado
Clasificación