fondo
Con el desarrollo de la empresa, la escala de los servicios de aplicaciones continúa expandiéndose, y la arquitectura de aplicación vertical original ya no puede cumplir con el desarrollo del producto.Docenas de ingenieros desarrollan diferentes funciones en paralelo en un proyecto, y la eficiencia del desarrollo continúa disminuyendo.
Como resultado, la empresa comenzó a promover integralmente el proceso orientado a servicios y concentró a la mayoría de los ingenieros del equipo en el proceso orientado a servicios. La servitización permite que cada ingeniero desarrolle solo en los subproyectos de los que es responsable, lo que mejora la eficiencia del desarrollo, pero la orientación a servicios también trae otros problemas:
- Es imposible saber el estado de ejecución de cada servicio, por ejemplo, ¿cuál es el QPS actual de un determinado servicio? ¿Cuál es su latencia promedio, cuál es su latencia del 99 % y cuál es su latencia del 99,9 %?
- El tiempo de respuesta de cierta interfaz es lento, ¿cómo localizar qué método lo está causando?
- ¿La carga está balanceada para cada servicio?
- Cuando hay inestabilidad en el servicio, ¿cómo juzgar si es causado por la base de datos, la caché o el servicio descendente?
- ¿Cuál es la latencia de respuesta de la base de datos y la caché?
- ¿Cómo evaluar la capacidad del servicio, a medida que las llamadas de servicio se vuelven más y más grandes, cuántas máquinas necesita soportar el servicio? ¿Cuándo se debe agregar la máquina?
Para resolver los problemas del desarrollo anterior, hoy presentamos una herramienta de estadísticas y supervisión del rendimiento de Java de alto rendimiento diseñada para aplicaciones de alta simultaneidad y baja latencia: MyPerf4J .
Escenas a utilizar
- Localice rápidamente cuellos de botella de rendimiento en aplicaciones Java en un entorno de desarrollo
- Supervisión a largo plazo de las métricas de rendimiento de aplicaciones Java en un entorno de producción
característica
- Alto rendimiento: un solo subproceso admite registros de 10 millones de tiempos de respuesta por segundo, y cada registro tarda solo 73 nanosegundos
- Sin intrusión: se utiliza el método JavaAgent, sin intrusión en el programa de la aplicación, sin necesidad de modificar el código de la aplicación
- Poca memoria: Usando la multiplexación de memoria, solo se generan unos pocos objetos temporales en todo el ciclo de vida, lo que no afecta el GC de la aplicación
- Alta precisión: Los tiempos de respuesta se calculan en nanosegundos
- Alto tiempo real: Admite monitoreo de segundo nivel, mínimo 1 segundo.
Indicadores de seguimiento
MyPerf4J recopila docenas de indicadores de seguimiento para cada aplicación, y todos los indicadores de seguimiento se recopilan y muestran en tiempo real.
La siguiente es una lista de indicadores de monitoreo que MyPerf4J admite actualmente:
Método
RPS, recuento, promedio, mínimo, máximo, desviación estándar, TP50, TP90, TP95, TP99, TP999, TP9999, TP99999, TP100
Memoria
HeapInit,HeapUsed,HeapCommitted,HeapMax,NonHeapInit,NonHeapUsed,NonHeapCommitted,NonHeapMax
GC de JVM
CollectCount,CollectTime
Clase JVM
Total,Cargado,Descargado
Inicio rápido
MyPerf4J utiliza el método de configuración JavaAgent para acceder de forma transparente a la aplicación sin ninguna intrusión en el código de la aplicación.
descargar
- Descargar y descomprimir MyPerf4J-ASM.zip
- Lea el archivo README extraído
- Modifique los valores de configuración de app_name, metrics.log.xxx y filter.packages.include en el archivo de configuración MyPerf4J.properties extraído
Paquete MyPerf4J-ASM.zip: https://github.com/LinShunKang/Objects/blob/master/zips/CN/MyPerf4J-ASM-3.3.0-SNAPSHOT.zip?raw=true
configuración
Agregue los siguientes dos parámetros a los parámetros de inicio de JVM
-javaagent:/ruta/a/MyPerf4J-ASM.jar-DMyPerf4JPropFile=/ruta/a/MyPerf4J.properties
correr
Inicie la aplicación y controle la salida del registro en /path/to/log/method_metrics.log:
Métricas del método MyPerf4J[2020-01-01 12:49:57, 2020-01-01 12:49: 58] <uni=1>Método[6] RP S Promedio (ms) Min (ms) Máx (ms) Desv estándar TP50 TP90 TP95 TP99 TP999 TP9999DemoServiceImpl.getId2(largo) 6524 6524 0,49 0,49 0,49 sp;1 ; 0.50 6524 6524 0 1 1 sp; 1 1 1 1 ; 1
DemoServiceImpl.getId3(largo) 4350 0,68 0,68 0,68 0,68 sp;1 ; 0.47 4350 4350 1 1 sp; 1 1 1 1 ; 1
DemoServiceImpl.getId4 (largo) 2176 0,76 0,76 0,76 sp;1 ; 0.43 2176 2176 1 1 sp; 1 1 1 1 ; 1
DemoServiceImpl.getId1 (largo) bsp; 8704 0,00 0,00 0 0 sp; ;0 0.00 8704 8704 0 0 sp; 0 0 0 0 ; 0
DemoDAO.getId1 (largo) bsp; 0,00 % 2176 0,00 % ; 0 ; 0 0.00 2176 2176 0 0 sp; 0 0 0 0 ; 0
DemoDAO.getId2() DynamicProxy & nbsp; ;DAO 0,00 % 2176 0,00 % 0 0 0.00 2176 2176 0 0 sp; 0 0 0 0 ; 0
desinstalar
Elimine los siguientes dos parámetros en los parámetros de inicio de JVM y reinicie para desinstalar esta herramienta.
-javaagent:/ruta/a/MyPerf4J-ASM.jar-DMyPerf4JPropFile=/ruta/a/MyPerf4J.properties
Dirección de fuente abierta: github.com/LinShunKang/MyPerf4J