otimização de desempenho jvm


otimização de desempenho jvm

 

**************************

Otimização do projeto: sistema operacional, arquitetura do projeto, código do programa, banco de dados, parâmetros jvm

 

Otimização do sistema operacional: memória, CPU, dispositivos de armazenamento etc.

Otimização da arquitetura do projeto : crie uma arquitetura razoável para o aplicativo

Otimização do código do programa: evite carregar muitos objetos de uma só vez, não faça referência a objetos de curto período com variáveis ​​de longa duração, etc.

Otimização de banco de dados: crie um banco de dados e uma estrutura de tabela razoáveis ​​para o projeto

 

otimização jvm: coletor de lixo e configurações de parâmetros de memória

Nota: Antes da otimização da jvm, é necessário otimizar a arquitetura do projeto, o código etc. Se a arquitetura do projeto ou o design do código for insuficiente, o ajuste dos parâmetros da jvm terá pouco efeito no desempenho do aplicativo

 

 

**************************

Indicadores de avaliação de ajuste da JVM : memória, rendimento, latência

 

Memória: a memória necessária para o funcionamento normal do programa

Taxa de transferência: a proporção entre o tempo de execução do aplicativo e o tempo total (tempo de execução do aplicativo + tempo de coleta de lixo)

Atraso: o tempo de pausa do aplicativo durante a coleta de lixo

 

O objetivo do ajuste da jvm é obter maior taxa de transferência ou latência menor com menos memória , mas esses três objetivos não podem ser alcançados simultaneamente:

Se você definir uma memória maior , a coleta de lixo levará mais tempo, resultando em um atraso maior ;

Se você definir uma memória mais baixa , ela acionará a coleta frequente de lixo, afetando a taxa de transferência

 

 

**********************

Coletor de lixo : thread único, paralelo, simultâneo, precisa escolher o coletor de lixo apropriado de acordo com o cenário do aplicativo

 

***************

Coletor de lixo de thread único: serial (nova geração), serial antigo (geração antiga)

 

Recursos: Durante a coleta de lixo, os threads do usuário param de funcionar e há apenas um thread de coleta de lixo

Cenários de aplicativos: adequados para aplicativos de desktop, com dezenas ou centenas de megabytes de lixo coletado e curtos períodos de pausa causados ​​pela coleta de lixo

 

Parâmetros relacionados

-XX: + UseSerialGC: use combinação de coleta de lixo antiga serial + serial

 

***************

Coletor de lixo paralelo : eliminação paralela (nova geração), paralela antiga (geração antiga)

 

Recursos: Durante a coleta de lixo, o encadeamento do usuário para e pode haver vários encadeamentos de coleta de lixo

Cenário do aplicativo: a eliminação paralela é um coletor de lixo com taxa de transferência primeiro, que fornece parâmetros para controlar o tempo e a taxa de transferência máximos

 

Parâmetros relacionados

-XX: + UseParallelGC: use eliminação paralela + combinação paralela de coletor de lixo antigo

-XX: + UseParallelOldGC: use a combinação de eliminação paralela + coletor de lixo antigo paralelo, esse parâmetro java14 será desativado e poderá ser removido no futuro

Java HotSpot(TM) 64-Bit Server VM warning: Option UseParallelOldGC was deprecated
 in version 14.0 and will likely be removed in a future release.

 

-XX: ParallelGCThreads: define o número de encadeamentos de reciclagem simultâneos

-XX: MaxGCPauseMillis: a pausa máxima em milissegundos, se a memória da pilha for muito grande, o tempo de pausa durante a coleta de lixo pode exceder o valor definido

-XX: GCTimeRatio: Taxa de transferência, o padrão é 99 e o uso máximo de 1% do tempo para coletar lixo

-XX: + UseAdaptiveSizePolicy: ajusta automaticamente o tamanho da geração jovem (-Xmn), a proporção de éden para sobrevivente (-XX: SurvivorRatio) e outros parâmetros

 

***************

Coletor de lixo simultâneo: G1 (nova geração, geração antiga)

 

Características: Durante a coleta de lixo, os threads do usuário podem funcionar, apenas uma breve pausa, pode haver vários threads de coleta de lixo

Cenário de aplicação: adequado para cenários de baixa pausa, comparado com a combinação paralela de eliminação + paralela antiga, o tempo de pausa do G1 é mais controlável

 

Parâmetros relacionados

-XX: + UseG1GC: use o coletor de lixo G1

 

 

**********************

Configuração de parâmetros de memória: Em circunstâncias normais, o uso dos parâmetros padrão pode atender aos requisitos de desempenho

 

***************

Parâmetros comuns

 

-Xms: define o valor mínimo da pilha

-Xmx: define o valor máximo da pilha

 

-XX: NewSize: define o valor mínimo da nova geração

-XX: MaxNewSize: define o valor máximo da nova geração

-Xmn: define o tamanho da nova geração, que é equivalente a definir NewSize e MaxNewSize com o mesmo valor

 

-XX: NewRatio: define a proporção da nova geração para a geração antiga, o padrão é 2, ou seja, a nova geração: geração antiga = 1: 2

-XX: SurvivorRatio: define a proporção de eden e survivor, o padrão é 8, ou seja: eden: survivor = 8: 1

 

***************

Medidas de otimização

 

Defina um tamanho de heap inicial razoável ou defina o tamanho máximo e mínimo para o mesmo, para evitar que o dimensionamento da memória heap afete o desempenho;

Ajuste o tamanho da memória da geração antiga para evitar o disparo total de gc com frequência;

Ajuste o tamanho da memória da geração jovem para evitar o acionamento frequente da geração jovem gc, resultando em um grande número de objetos entrando na geração antiga;

Use coletores de lixo paralelos ou simultâneos para coleta de lixo ;

Considere usar uma versão alta do jdk, o lançamento estável da versão alta do jdk geralmente tem um desempenho mais alto

 

 

Publicado 387 artigos originais · Gosto 98 · Visitas com mais de 30.000

Acho que você gosta

Origin blog.csdn.net/weixin_43931625/article/details/105274183
Recomendado
Clasificación