Indicadores de monitoramento de teste de desempenho e guia de análise e ajuste

1. Que fatores se tornarão o gargalo do sistema?

CPU: Se houver muitos cálculos, eles ocuparão recursos da CPU continuamente por um longo tempo, fazendo com que outros recursos não consigam competir pela CPU e respondam lentamente, causando problemas de desempenho do sistema, como FullGC frequente e contexto frequente causado por multi-threading. A comutação fará com que a CPU fique ocupada. Geralmente, é mais apropriado que o uso da CPU seja <75%.

Memória: a memória Java geralmente é alocada por meio da memória jvm, e a memória heap na jvm é usada principalmente para armazenar objetos criados por Java. A velocidade de leitura e gravação da memória é muito rápida, mas o espaço de memória é limitado.Quando o espaço de memória está cheio e os objetos não podem ser reciclados, isso causará estouro ou vazamento de memória.

E/S de disco: O espaço de armazenamento do disco é muito maior que o da memória, mas a velocidade de leitura e gravação do disco é mais lenta que a da memória. Embora a unidade de estado sólido SSD tenha sido introduzida agora, ela ainda não pode ser comparada com a velocidade do memória.

Rede: O tamanho da largura de banda terá um grande impacto na transmissão de dados. Quando a quantidade de simultaneidade aumenta, a rede pode facilmente se tornar um gargalo.

Exceção: Se um programa Java lançar uma exceção, ela deverá ser capturada. Este processo consome desempenho. Se o tratamento de exceções continuar sob alta simultaneidade, o desempenho do sistema será afetado.

Banco de dados: as operações de banco de dados geralmente envolvem leitura e gravação de E/S de disco. Um grande número de operações de leitura e gravação de banco de dados levará a gargalos de desempenho de E/S de disco, o que, por sua vez, levará a atrasos nas operações de banco de dados.

Ao programar simultaneamente, multi-threads são frequentemente usados ​​para operar o mesmo recurso. Neste momento, para garantir a atomicidade dos dados, bloqueios devem ser usados. O uso de bloqueios provocará troca de contexto, causando sobrecarga de desempenho. No JDK1, após 6, foram adicionados bloqueio de polarização, bloqueio de rotação, bloqueio leve, aumento de espessura de bloqueio e eliminação de bloqueio.

2. Que indicadores são utilizados para medir o desempenho do sistema?

1.Tempo de resposta RT

Tempo de resposta do banco de dados, ou seja, o tempo das operações do banco de dados

Tempo de resposta do servidor, o servidor inclui o tempo consumido pelas solicitações distribuídas pelo Nginx e o tempo consumido pela execução do programa do servidor.

Tempo de resposta da rede, transmissão da rede e tempo que o hardware da rede leva para analisar as solicitações transmitidas.

Tempo de resposta do cliente, para clientes Web e Apps em geral, o tempo consumido pode ser ignorado. Porém, se o cliente tiver uma grande quantidade de processamento lógico, o tempo consumido pode se tornar maior.

2. Taxa de transferência TPS

Taxa de transferência do disco: entrada e saída IOPS (entrada/saída por segundo) por segundo. Este é o número de solicitações de E/S que o sistema pode processar por unidade de tempo. As solicitações de E/S geralmente são solicitações de operação de leitura ou gravação de dados. Preste atenção à aleatoriedade. Desempenho de leitura e gravação, adequado para aplicações com leitura e gravação aleatórias frequentes, como armazenamento de arquivos pequenos e servidores de e-mail. A taxa de transferência de dados, que é a quantidade de dados que pode ser transmitida por unidade de tempo, é usada para aplicações que exigem um grande número de leituras e gravações sequenciais e uma grande quantidade de dados contínuos, como edição de vídeo.

Taxa de transferência da rede: refere-se à taxa máxima de dados que o dispositivo pode aceitar sem perda de quadros durante a transmissão da rede. A taxa de transferência da rede não está apenas relacionada à largura de banda, mas também intimamente relacionada ao poder de processamento da CPU, placa de rede, firewall e E / S. A taxa de transferência é determinada pelo poder de processamento da placa de rede, algoritmo interno do programa e largura de banda.

3. Uso de recursos

Para uso da CPU, você pode primeiro entender as informações básicas da CPU, incluindo o número de CPUs físicas e o número de núcleos de uma única CPU. Em seguida, você pode verificar o uso por meio de comandos, vmstat, mpstat, top

Uso de memória, free -m, vmstat, top

E/S de disco, iostat, iotop

E/S de rede, netstat, ifconfig, tcpstat

3. Questões a serem observadas ao realizar testes de desempenho

Quando fazemos testes de desempenho, o sistema será executado cada vez mais rápido, e as velocidades de acesso subsequentes serão várias vezes mais rápidas do que nossa primeira velocidade de acesso.Isso ocorre porque a ordem de compilação da linguagem Java é que o arquivo .java é primeiro compilado no arquivo .class e, em seguida, converta o bytecode .class em código de máquina local por meio do interpretador antes de poder ser executado.

Para economizar memória e eficiência de execução, quando o código for executado inicialmente, o intérprete irá primeiro interpretar e executar esse código. À medida que o número de vezes que o código é executado aumenta, a máquina virtual descobre que um determinado método ou código está sendo executado com particular frequência e é identificado como um código de ponto quente.

A fim de melhorar a eficiência de execução do código quente, a máquina virtual irá compilar esses códigos em código de máquina local relacionado à plataforma por meio de um compilador just-in-time (JIT) durante o tempo de execução e, em seguida, armazená-los na memória. Isso fará com que o sistema funcione lentamente pela primeira vez e os tempos de acesso subsequentes sejam várias vezes mais rápidos.

Ao realizar testes de desempenho, o conjunto de dados processados ​​em cada teste é o mesmo, mas os resultados são diferentes. Isso ocorre porque o teste é acompanhado por muitos fatores instáveis, como a influência de outros processos na máquina, flutuações na rede e cada Os estágios da coleta de lixo da JVM são diferentes. Podemos calcular a média dos resultados do teste através de vários testes, desde que o valor médio esteja dentro de uma faixa razoável e a flutuação não seja grande, o teste de desempenho será aprovado.

4. Ao localizar problemas de desempenho, você pode usar análise estratégica e solução de problemas de baixo para cima.

Depois de realizarmos o teste de estresse, geraremos um relatório de teste de desempenho , que inclui RT, TPS, TP99, CPU, memória, E/S do servidor estressado e a frequência GC da JVM. Os gargalos de desempenho podem ser encontrados por meio desses indicadores e podemos analisá-los de baixo para cima.

1. Primeiro, no nível do sistema operacional, verifique se a CPU, a memória, a E/S e o uso da rede do sistema estão anormais, depois use comandos para encontrar logs anormais e, finalmente, encontre a causa do gargalo por meio da análise de log.

2. Você também pode verificar a frequência de coleta de lixo da JVM e a alocação de memória no nível da JVM do aplicativo Java para ver se há alguma anormalidade, analisar os logs de coleta de lixo e encontrar a causa do gargalo.

3. Se não houver exceções nos níveis do sistema e da JVM, você poderá verificar se há gargalos de desempenho na camada de negócios do serviço de aplicativo, como problemas de programação Java, gargalos de leitura e gravação de banco de dados, etc.

5. Ao otimizar questões de desempenho, você pode usar estratégias de cima para baixo para otimização.

A sequência geral de ajuste pode ser desde o ajuste de negócios até o ajuste de programação e, finalmente, até o ajuste do sistema.

1. Ajuste da camada de aplicação

A primeira é otimizar o código. Problemas de código são frequentemente expostos devido ao consumo de recursos do sistema. Por exemplo, o código causa estouro de memória, fazendo com que a JVM fique sem memória, e ocorre FullGC frequente, fazendo com que a CPU fique alta .

A segunda é otimizar o design, principalmente para otimizar a camada de negócios e o código da camada de middleware.Por exemplo, você pode usar o modo proxy e colocá-lo no cenário de criação de objeto frequentemente chamado para compartilhar um objeto criado e reduzir o consumo de criação objetos.

A terceira etapa é otimizar o algoritmo e escolher o algoritmo apropriado para reduzir a complexidade do tempo.

2. Ajuste de middleware: ajuste de MySQL

1) Estrutura da tabela e otimização do índice

Principalmente para otimizar o design do banco de dados, o design da estrutura da tabela e as dimensões de configuração do índice.Ao projetar a estrutura da tabela, considere as capacidades de expansão horizontal e vertical do banco de dados, planeje com antecedência o crescimento futuro no volume de dados, volume de leitura e gravação e planeje sub -bancos de dados.Plano de subtabela. Escolha tipos de dados apropriados para campos, preferindo estruturas de dados menores.

2) Otimização de instruções SQL

Principalmente para otimizar instruções SQL, use explicar para visualizar o plano de execução e ver se e quais índices são usados. Você também pode usar o comando Perfil para analisar o tempo gasto em cada etapa durante a execução da instrução.

3) Otimização de parâmetros MySQL

Principalmente para otimizar a configuração do serviço MySQL, como o gerenciamento do número de conexões e a otimização de vários tamanhos de cache, como cache de índice, cache de consulta, cache de classificação, etc.

4) Configuração de hardware e sistema

Otimize dispositivos de hardware e configurações do sistema operacional, como ajuste de parâmetros do sistema operacional, desativação de swap, aumento de memória e atualização de unidades de estado sólido.

3. Ajuste do sistema

O primeiro é o ajuste do sistema operacional, as configurações dos parâmetros do kernel para operações do Linux podem ser ajustadas para atingir o objetivo de fornecer alto desempenho.

Em segundo lugar, ajuste JVM, configuração de espaço de memória JVM razoável e algoritmo de coleta de lixo para melhorar o desempenho.Por exemplo, se a lógica de negócios criar objetos grandes, podemos configurar para colocar os objetos grandes diretamente na geração antiga, o que pode reduzir YongGC ocorre com frequência na geração mais jovem, reduzindo o tempo de uso da CPU.

4. Estratégias de ajuste

A primeira é trocar tempo por espaço. Às vezes, o sistema não possui altos requisitos de velocidade de consulta, mas altos requisitos de espaço de armazenamento. Neste momento, podemos considerar a troca de tempo por espaço.

Em segundo lugar, o espaço é trocado por tempo e o espaço de armazenamento é usado para melhorar a velocidade de acesso. Um exemplo típico é a estratégia de sub-banco de dados e tabela do MySQL. Quando os dados do formulário MySQL são armazenados em mais de dezenas de milhões, o desempenho de leitura e gravação diminuirá. Neste momento, podemos dividir os dados. Para atingir o objetivo de melhorar o desempenho na consulta, os dados em cada tabela são pequenos.

5. Estratégia de desinvestimento

Depois que o sistema estiver ajustado, ainda haverá problemas de desempenho. Neste momento, precisamos ter uma estratégia de encobrimento. A primeira é limitar o fluxo, definir o limite máximo de acesso para a entrada do sistema e ao mesmo tempo , tome medidas de disjuntor para retornar solicitações malsucedidas. A segunda é a expansão horizontal: quando o número de visitas ultrapassa um determinado limite, o sistema pode aumentar automaticamente os serviços horizontalmente.

Por fim, gostaria de agradecer a todos que lêem meu artigo com atenção. A reciprocidade é sempre necessária. Embora não seja algo muito valioso, se você puder usá-lo, poderá pegá-lo diretamente:

Insira a descrição da imagem aqui

Esta informação deve ser o armazém de preparação mais abrangente e completo para amigos [de teste de software]. Este armazém também acompanhou dezenas de milhares de engenheiros de teste na jornada mais difícil. Espero que também possa ajudá-lo!   

Acho que você gosta

Origin blog.csdn.net/YLF123456789000/article/details/133273735
Recomendado
Clasificación