El agente de Application Real-Time Monitoring Service (ARMS) mejora los bytecodes durante la ejecución de la aplicación para gestionar su rendimiento. Al igual que otras soluciones de gestión de rendimiento implementadas mediante la mejora de bytecodes, el agente de ARMS para Java genera cierta sobrecarga de rendimiento. No obstante, el equipo de ARMS adoptó diversas técnicas para reducir esta sobrecarga sin comprometer la estabilidad de la aplicación. En este informe se simulan escenarios con distintos volúmenes de tráfico para evaluar la sobrecarga de rendimiento del agente de ARMS para Java V4.x. Antes de conectar su aplicación a Application Monitoring, le recomendamos consultar este informe para realizar una evaluación integral.
Escenarios de prueba
Diagrama de flujo
La aplicación Java, desarrollada con el modelo-vista-controlador (MVC) de Spring Web, accede a MySQL y Redis mediante los frameworks Druid y Jedis. Estas interacciones responden a las solicitudes enviadas desde Alibaba Cloud Performance Testing (PTS).
Cuando la aplicación recibe las solicitudes
${mall-gateway}/case/api/v1/mysql/execute, accede a MySQL. Por cada solicitud recibida, la aplicación consulta MySQL entre 1 y 4 veces.Cuando la aplicación recibe las solicitudes
${mall-gateway}/case/api/v1/redis/execute, accede a Redis. Por cada solicitud recibida, la aplicación consulta Redis entre 1 y 10 veces.
Entorno de prueba
PTS proporciona el origen de las pruebas de estrés.
La aplicación Java, MySQL y Redis se despliegan en el mismo clúster de Alibaba Cloud Container Service for Kubernetes (ACK). El tipo de instancia de los nodos es ecs.u1-c1m2.8xlarge y la versión del sistema operativo de los nodos es Alibaba Cloud Linux 2.1903 LTS 64-bit.
-
Cada pod de la aplicación cuenta con 2 núcleos, 4 GB de memoria y dos réplicas. Los parámetros de JVM son los siguientes:
-Xms3500m -Xmx3500m -XX:MetaspaceSize=500m La versión del agente de ARMS para Java es la 4.2.1.
Procedimiento de prueba
Ejecute tres pruebas de estrés a 500, 1,000 y 2,000 QPS. Cada prueba debe durar 1 hora. Antes de iniciar cada prueba, prepare la aplicación Java con 100 QPS durante 3 minutos. Los resultados obtenidos servirán como métricas de rendimiento base.
Instale el agente de ARMS para Java V4.1.11. Configure una tasa de muestreo del 10 % en la política de muestreo y repita las pruebas de estrés del paso 1 para comparar las diferencias en el consumo de CPU, el uso de memoria y el tiempo de respuesta de la aplicación Java.
Instale el agente de ARMS para Java V4.1.11. Configure una tasa de muestreo del 100 % en la política de muestreo y repita las pruebas de estrés del paso 1 para comparar las diferencias en el consumo de CPU, el uso de memoria y el tiempo de respuesta de la aplicación Java.
Para obtener más información sobre cómo configurar la política de muestreo, consulte Trace sampling modes (Agent V3.2.8 or later).
Las funciones básicas de Application Monitoring están habilitadas, incluidas las métricas, los traces y los cuantiles. Todos los complementos también se encuentran habilitados. Algunas funciones avanzadas se deshabilitan temporalmente, como la compresión de traces, la convergencia de URL, el enmascaramiento de datos y el continuous profiling.
Métricas de rendimiento base
|
Elemento |
CPU |
Memoria |
Tiempo de respuesta (unidad: milisegundos) |
|
500 QPS |
6.737% |
11.51% |
57.6 |
|
1,000 QPS |
13.040% |
11.81% |
63.9 |
|
2,000 QPS |
26.796% |
12.19% |
70.5 |
La métrica de CPU representa el porcentaje de CPU que utilizan los pods respecto al total available (2 núcleos).
La métrica de memoria indica el porcentaje de memoria que consumen los pods respecto al total. Dado que la memoria utilizada por los pods crece de forma natural hasta alcanzar el valor de requests, el informe toma el uso real de memoria al finalizar las pruebas de estrés.
La métrica de tiempo de respuesta muestra el promedio de tiempo que tardan las solicitudes. Unidad: milisegundos.
Métricas de rendimiento del agente de ARMS para Java V4.x
|
Elemento |
Tasa de muestreo del 10 % |
Tasa de muestreo del 100 % |
||||
|
CPU |
Memoria |
Tiempo de respuesta (unidad: milisegundos) |
CPU |
Memoria |
Tiempo de respuesta (unidad: milisegundos) |
|
|
500 QPS |
8.412% |
13.72% |
58.5 |
9.316% |
13.91% |
58.7 |
|
1,000 QPS |
16.947% |
14.14% |
64.9 |
18.114% |
14.42% |
65.3 |
|
2,000 QPS |
34.850% |
14.64% |
74.6 |
35.945% |
14.67% |
76.1 |
La relación entre la tasa de muestreo y el consumo de CPU o los QPS no es lineal. De forma predeterminada, existe un límite máximo para la recopilación de traces por segundo.
Sobrecarga de rendimiento del agente de ARMS para Java V4.x
|
Elemento |
Tasa de muestreo del 10 % |
Tasa de muestreo del 100 % |
||||
|
CPU |
Memoria |
Tiempo de respuesta (unidad: milisegundos) |
CPU |
Memoria |
Tiempo de respuesta (unidad: milisegundos) |
|
|
500 QPS |
+1.68% |
+2.21% |
+0.9 |
+2.58% |
+2.40% |
+1.1 |
|
1,000 QPS |
+3.907% |
+2.33% |
+1.0 |
+5.07% |
+2.61% |
+1.4 |
|
2,000 QPS |
+8.05% |
+2.45% |
+4.1 |
+9.14% |
+2.48% |
+5.6 |
Conclusión
La sobrecarga adicional de CPU y memoria generada por el agente de ARMS para Java V4.x se mantiene por debajo del 10 %.
El agente de ARMS para Java V4.x tiene un impacto mínimo en el tiempo de respuesta (10 %), el cual aumenta solo 1 milisegundo a 1,000 QPS.
La sobrecarga de rendimiento con una tasa de muestreo fija del 100 % es ligeramente mayor que con una tasa fija del 10 %.