O agente do Application Real-Time Monitoring Service (ARMS) aprimora bytecodes durante a execução da aplicação para gerenciar o desempenho. Assim como outras soluções de gerenciamento de desempenho implementadas por meio do aprimoramento de bytecodes, o agente do ARMS para Java gera uma certa sobrecarga de desempenho. No entanto, a equipe do ARMS adotou diversas técnicas para reduzir essa sobrecarga sem comprometer a estabilidade da aplicação. Neste relatório de teste, simulamos cenários com diferentes volumes de tráfego para avaliar a sobrecarga de desempenho do agente do ARMS para Java V4.x. Antes de conectar sua aplicação ao Application Monitoring, recomendamos que você consulte este relatório para fazer uma avaliação abrangente.
Cenários de teste
Fluxograma
Desenvolvida no padrão model-view-controller (MVC) do Spring Web, a aplicação Java acessa o MySQL e o Redis por meio dos frameworks Druid e Jedis, com base nas requisições enviadas pelo Alibaba Cloud Performance Testing (PTS).
Ao receber as requisições
${mall-gateway}/case/api/v1/mysql/execute, a aplicação acessa o MySQL. A cada requisição recebida, a aplicação acessa o MySQL de 1 a 4 vezes.Ao receber as requisições
${mall-gateway}/case/api/v1/redis/execute, a aplicação acessa o Redis. A cada requisição recebida, a aplicação acessa o Redis de 1 a 10 vezes.
Ambiente de teste
A origem dos testes de estresse é fornecida pelo PTS.
A aplicação Java, o MySQL e o Redis estão implantados no mesmo cluster do Alibaba Cloud Container Service for Kubernetes (ACK). O tipo de instância dos nós é ecs.u1-c1m2.8xlarge, e a versão do sistema operacional dos nós é o Alibaba Cloud Linux 2.1903 LTS 64-bit.
-
Cada pod da aplicação possui 2 núcleos, 4 GB de memória e duas réplicas. Os parâmetros da JVM são os seguintes:
-Xms3500m -Xmx3500m -XX:MetaspaceSize=500m A versão do agente do ARMS para Java é a 4.2.1.
Procedimento de teste
Execute três testes de estresse a 500, 1.000 e 2.000 QPS. Cada teste de estresse dura 1 hora. Antes de cada teste, aqueça a aplicação Java a 100 QPS por 3 minutos. O resultado do teste será usado como métricas de desempenho de linha de base.
Instale o agente do ARMS para Java V4.1.11. Configure uma taxa de amostragem de 10% na política de amostragem e repita os testes de estresse da Etapa 1 para comparar as diferenças na sobrecarga de CPU, sobrecarga de memória e tempo de resposta da aplicação Java.
Instale o agente do ARMS para Java V4.1.11. Configure uma taxa de amostragem de 100% na política de amostragem e repita os testes de estresse da Etapa 1 para comparar as diferenças na sobrecarga de CPU, sobrecarga de memória e tempo de resposta da aplicação Java.
Para obter mais informações sobre como configurar a política de amostragem, consulte Trace sampling modes (Agent V3.2.8 or later).
Os recursos básicos do Application Monitoring estão ativados, incluindo métricas, rastros e quantis. Todos os plug-ins também estão ativados. Alguns recursos avançados estão temporariamente desativados, como compactação de rastros, convergência de URL, mascaramento de dados e profiling contínuo.
Métricas de desempenho de linha de base
|
Item |
CPU |
Memória |
Tempo de resposta (Unidade: milissegundos) |
|
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 |
A métrica de CPU representa a porcentagem de CPU usada pelos pods em relação ao total de CPU (2 núcleos).
A métrica de memória representa a porcentagem de memória usada pelos pods em relação à memória total. Como a memória usada pelos pods cresce naturalmente até atingir o valor de requisições (requests), o relatório utiliza o uso real de memória no final dos testes de estresse.
A métrica de tempo de resposta representa o tempo médio de resposta das requisições. Unidade: milissegundos.
Métricas de desempenho do agente do ARMS para Java V4.x
|
Item |
Taxa de amostragem de 10% |
Taxa de amostragem de 100% |
||||
|
CPU |
Memória |
Tempo de resposta (Unidade: milissegundos) |
CPU |
Memória |
Tempo de resposta (Unidade: milissegundos) |
|
|
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 |
A relação entre a taxa de amostragem e a CPU, bem como o QPS, não é linear. Por padrão, há um limite superior para a coleta de rastros por segundo.
Sobrecarga de desempenho do agente do ARMS para Java V4.x
|
Item |
Taxa de amostragem de 10% |
Taxa de amostragem de 100% |
||||
|
CPU |
Memória |
Tempo de resposta (Unidade: milissegundos) |
CPU |
Memória |
Tempo de resposta (Unidade: milissegundos) |
|
|
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 |
Conclusão
A sobrecarga adicional de CPU e memória causada pelo agente do ARMS para Java V4.x fica dentro de 10%.
O agente do ARMS para Java V4.x tem um impacto pequeno no tempo de resposta (10%), que aumenta apenas 1 milissegundo a 1.000 QPS.
A sobrecarga de desempenho com uma taxa de amostragem fixa de 100% é ligeiramente maior do que com uma taxa de amostragem fixa de 10%.