O agente do Application Real-Time Monitoring Service (ARMS) instrumenta o bytecode em tempo de execução para monitorar o desempenho da aplicação. Assim como outras soluções baseadas em instrumentação de bytecode, o agente ARMS para Java gera sobrecarga de desempenho. Este relatório simula cenários com diferentes níveis de tráfego para medir essa sobrecarga no agente ARMS para Java V5.x. Antes de conectar sua aplicação ao Application Monitoring, consulte este relatório para avaliar o impacto no desempenho.
Cenários de teste
A figura a seguir ilustra a arquitetura geral.
A aplicação Java foi desenvolvida no modelo Spring Web Model-View-Controller (MVC) e acessa MySQL e Redis por meio dos frameworks Druid e Jedis, com base em requisições enviadas pelo Alibaba Cloud Performance Testing (PTS).
Ao receber requisições
${mall-gateway}/case/api/v1/mysql/execute, a aplicação acessa o MySQL. Cada requisição desse tipo gera de 1 a 4 acessos ao banco de dados.Ao receber requisições
${mall-gateway}/case/api/v1/redis/execute, a aplicação acessa o Redis. Cada requisição desse tipo gera de 1 a 10 acessos ao serviço.
Ambiente de teste
O PTS fornece a source dos testes de estresse.
A aplicação Java, o MySQL e o Redis estão implantados no mesmo cluster do Alibaba Cloud Container Service for Kubernetes (ACK). Os nós utilizam o tipo de instância ecs.u1-c1m2.8xlarge e executam o sistema operacional Alibaba Cloud Linux 2.1903 LTS 64 bits.
-
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:
-Xms3500m -Xmx3500m -XX:MetaspaceSize=500m A versão do agente ARMS para Java é Aliyun JavaAgent 5.1.2.
Os recursos básicos do Application Monitoring estão ativados, incluindo métricas, rastros e quantis. Todos os plug-ins também estão habilitados. Alguns recursos avançados foram desativados durante o teste, como compressão de rastros, convergência de URL, mascaramento de dados e profiling contínuo.
Procedimento de teste
Execute três testes de estresse a 500, 1.000 e 2.000 QPS, com duração de 1 hora cada. Antes de iniciar cada teste, aqueça a aplicação Java a 100 QPS por 3 minutos. O resultado servirá como linha de base das métricas de desempenho.
Instale o agente ARMS para Java V5.x. 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 no consumo de CPU, uso de memória e tempo de resposta da aplicação Java.
Instale o agente ARMS para Java V5.x. Defina a taxa de amostragem em 100% na política de amostragem e refaça os testes de estresse da Etapa 1 para analisar as variações no consumo de CPU, uso 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 for agents before 3.2.8.
Os recursos básicos do Application Monitoring do ARMS (como métricas estatísticas, cadeias de chamadas e quantis) e todos os recursos de plug-in estão ativados. No entanto, alguns recursos avançados foram temporariamente desativados, como compressão de rastros, convergência de URL, a opção de mascaramento de dados e profiling contínuo.
Métricas de desempenho da linha de base
|
Item |
CPU |
Memória |
Tempo de resposta (Unidade: milissegundos) |
|
500 QPS |
6.752% |
11,48% |
57,8 |
|
1.000 QPS |
13.112% |
11,78% |
64,1 |
|
2.000 QPS |
26.910% |
12,22% |
70,8 |
A métrica de CPU indica a porcentagem de CPU utilizada pelos pods em relação ao total disponível (2 núcleos).
A métrica de memória representa a porcentagem de memória usada pelos pods em relação ao total. Como o uso de memória pelos pods cresce naturalmente até atingir o valor de requests, o relatório considera o uso real de memória ao final dos testes de estresse.
O tempo de resposta corresponde à média do tempo de resposta das requisições. Unidade: milissegundos.
Métricas absolutas de desempenho com o agente ARMS instalado
|
Item |
CPU (taxa de amostragem de 10%) |
Memória (taxa de amostragem de 10%) |
Tempo de resposta em ms (taxa de amostragem de 10%) |
CPU (taxa de amostragem de 100%) |
Memória (taxa de amostragem de 100%) |
Tempo de resposta em ms (taxa de amostragem de 100%) |
|
500 QPS |
8.492% |
13,66% |
58,6 |
9.392% |
13,83% |
59,0 |
|
1.000 QPS |
16.932% |
14,07% |
65,2 |
18.072% |
14,33% |
65,6 |
|
2.000 QPS |
35.120% |
14,61% |
75,1 |
35.930% |
14,64% |
76,2 |
O consumo de CPU não escala linearmente com a taxa de amostragem ou com o QPS. Por padrão, há um limite superior para a coleta de rastros por segundo.
Sobrecarga de desempenho do agente ARMS para Java V5.x
|
Item |
CPU (taxa de amostragem de 10%) |
Memória (taxa de amostragem de 10%) |
Tempo de resposta em ms (taxa de amostragem de 10%) |
CPU (taxa de amostragem de 100%) |
Memória (taxa de amostragem de 100%) |
Tempo de resposta em ms (taxa de amostragem de 100%) |
|
500 QPS |
+1,74% |
+2,18% |
+0,8 |
+2,64% |
+2,35% |
+1,2 |
|
1.000 QPS |
+3,82% |
+2,29% |
+1,1 |
+4,96% |
+2,55% |
+1,5 |
|
2.000 QPS |
+8,21% |
+2,39% |
+4,3 |
+9,02% |
+2,42% |
+5,4 |
Conclusão
A sobrecarga adicional de CPU e memória causada pelo agente ARMS para Java V5.x manteve-se abaixo de 10%.
O impacto do agente ARMS para Java V5.x no tempo de resposta é baixo (inferior a 10%), com um aumento de aproximadamente 1,1 milissegundo a uma taxa de amostragem de 10% e de 1,5 milissegundo a 100%, quando o QPS é de 1.000.
A sobrecarga de desempenho com uma taxa de amostragem fixa de 100% é ligeiramente maior do que com uma taxa fixa de 10%.
Esses resultados baseiam-se nas condições de teste descritas acima, considerando que certos recursos avançados permaneceram desativados durante a avaliação.