arquivo de log java gc ROTATIVO

O registro do GC é uma ferramenta importante para otimizar o desempenho do aplicativo e solucionar problemas de memória. Os logs de coleta de lixo podem ser gerados em um caminho de arquivo específico, passando o argumento JVM "-Xloggc".

-Xloggc:/home/GCEASY/gc.log

Configure o arquivo gc usando este método: sempre que o aplicativo for reiniciado, o arquivo de log antigo do GC será substituído pelo novo arquivo de log do GC porque o caminho do arquivo é o mesmo (ou seja, /home/GCEASY/gc.log). Portanto, você não poderá analisar logs de GC antigos que existiam antes de reiniciar o aplicativo. Especialmente quando o aplicativo trava ou ocorrem alguns problemas de desempenho, você precisa de logs de GC antigos para análise.

Uma estratégia simples para aliviar esse desafio é gravar o novo conteúdo do log do GC em um local de arquivo diferente. Neste artigo, 2 estratégias diferentes são compartilhadas com você: 

1、Sufixo carimbo de data/hora para arquivo de log do GC

Se você puder adicionar o sufixo ao arquivo de log do GC com o carimbo de data/hora da reinicialização da JVM, o local do arquivo de log do GC se tornará exclusivo. Assim, os novos logs de GC não substituirão os logs de GC antigos. Isso pode ser alcançado pela seguinte figura:

"-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/GCEASY/gc-%t.log"

'%t' adiciona um sufixo ao arquivo de log gc com um carimbo de data e hora no formato: 'AAAA-MM-DD_HH-MM-SS'. Portanto, o nome do arquivo de log do GC gerado começará a se parecer com: 'gc-2019-01-29_20-41-47.log'

Este método também tem um pequeno problema: problema de aumento do tamanho do arquivo

Suponha que se você não reiniciar a JVM, o tamanho do arquivo de log do GC poderá crescer para um tamanho enorme. Porque nesta estratégia novos arquivos de log do GC só serão criados quando você reiniciar a JVM. Mas na minha opinião isso não é um grande problema, já que um evento de GC ocupa apenas alguns bytes. Portanto, o tamanho do arquivo de log do GC não crescerá além de um ponto gerenciável para a maioria dos aplicativos. 

2. Use -XX:+UseGCLogFileRotation

"-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/GCEASY/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M"

Ao passar "-XX:-UseGCLogFileRotation", a própria JVM habilita a rotação do log do GC.

  • '-XX:NumberOfGClogFiles' define o número de arquivos usados ​​ao girar logs, deve ser >= 1. Os arquivos de log girados usarão o seguinte esquema de nomenclatura, <nome do arquivo>.0, <nome do arquivo>.1,…, <nome do arquivo>.n-1.
  • '-XX:GCLogFileSize' define o tamanho do arquivo de log em que ponto o log será girado, deve ser >= 8K

No entanto, este método também apresenta alguns pequenos problemas:

1) Perder registros antigos do GC

Suponha que se você configurar -XX:NumberOfGCLogFiles=5 então, em um período de tempo, 5 arquivos de log do GC serão criados:

gc.log.0 — oldest GC Log content
gc.log.1
gc.log.2
gc.log.3
gc.log.4 — latest GC Log content

O conteúdo do log do GC mais recente será gravado em "gc.log.4" e o conteúdo do log do GC antigo aparecerá em "gc.log.0".

Quando o aplicativo começar a gerar mais logs de GC do que o "-XX:NumberOfGCLogFiles" configurado (5 neste caso), o conteúdo antigo do log de GC em gc.log.0 será excluído. Novos eventos de GC serão gravados em gc.log.0. Isso significa que você não terá todos os logs do GC gerados.

2)Registros de GC misturados

Suponha que o aplicativo crie 5 arquivos de log gc, ou seja,

gc.log.0
gc.log.1
gc.log.2
gc.log.3
gc.log.4

Então, digamos que você esteja reiniciando o aplicativo. Agora, o novo log do GC será gravado no arquivo gc.log.0 e o conteúdo do log do GC antigo aparecerá em gc.log.1, gc.log.2, gc.log.3, gc.log.4, ou seja,

gc.log.0 — GC log file content after restart
gc.log.1 — GC log file content before restart
gc.log.2 — GC log file content before restart
gc.log.3 — GC log file content before restart
gc.log.4 — GC log file content before restart

Portanto, o conteúdo do seu novo log do GC fica confuso com o antigo log do GC. Para aliviar esse problema, talvez seja necessário mover todos os logs antigos do GC para uma pasta diferente antes de reiniciar o aplicativo.

3) Analise logs por meio de ferramentas:

Agora, para analisar os arquivos de log do GC com ferramentas de GC como (gceasy.io, GCViewer…), você precisa fazer upload de vários arquivos de log do GC em vez de apenas um arquivo de log do GC.

ARQUIVOS DE LOG ROTATIVOS DO GC – GC fácil – Universal Java GC Log Analyzer

おすすめ

転載: blog.csdn.net/liuxiao723846/article/details/128910146