zhanglei / jvm-gc-logs-analyzer

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

jvm-gc-logs-analyzer

This project is a Java Virtual Machine and Garbage Collector log analyzer. It is dedicated to JVM 11 and above (JVM 8 support is under development). The logs have to be in a proper format with proper decorators, check sections at the end for limitations and working examples.

The project creates two artifacts:

  • analyzer-web.jar - web application that is deployed on http://gclogs.com
  • analyzer-standalone.jar - much faster standalone Swing application

How to install - from binaries

Simply download latest release.

How to install - from sources

git clone --depth 1 https://github.com/krzysztofslusarski/jvm-gc-logs-analyzer.git
cd jvm-gc-logs-analyzer/
mvn clean package

JAVA_HOME should point to JDK 11.

How to run

Standalone application: java -jar analyzer-standalone.jar

Web application: java -jar analyzer-web.jar

Java should point to JDK 11.

Features

Garbage collector logs analyzer

gc*,
gc+stringdedup=debug,
gc+ergo=trace,
gc+age=trace,
gc+phases=trace,
gc+humongous=trace

There are multiple charts and tables generated by this tool. I will show in README only the most important one.

Garbage collector table statistics

Heap before/after garbage collection

G1GC max number of regions

Garbage collector phase time

Allocation rate

Safepoint logs anaylzer

-Xlog:safepoint

From safepoint logs this tool will create tables and charts:

Safepoint operation statistics

In this table you can find aggregated statistics of:

  • each safepoint operation
  • time to safepoint

Total time in phases

This chart shows how much time your JVM spends in safepoint operation, time to safepoint and in your application.

Application time (in time)

This charts show how much time your JVM spends running your application in 2/5/15 seconds windows.

Safepoint operation count

This chart shows distribution of safepoint operation count.

Safepoint operation time

This chart shows distribution of time between each safepoint operation.

Safepoint operation (in time)

This chart shows distribution of safepoint operation in time.

Classloader logs analyzer

-Xlog:class+unload,class+load

From classloader logs this tool will create charts:

Current class count and class loading activity

Thread logs analyzer

-Xlog:os+thread

From OS thread logs this tool will create charts:

Current thread count and thread creation activity

Compilation logs analyzer

-Xlog:jit+compilation=debug

From JIT compilation logs this tool will create charts:

Current compilation count with and without tier distinguish

Code cache and sweeper logs analyzer

-Xlog:codecache+sweep*=trace

From code cache and sweeper logs this tool will create charts:

Current code cache size

Sweeper activity

JVM Xlog configuration

I recommend to use following Xlog configuration

-Xlog:codecache=info,
codecache+sweep*=trace,
class+unload,
class+load,
os+thread,
safepoint,
gc*,
gc+stringdedup=debug,
gc+ergo=trace,
gc+age=trace,
gc+phases=trace,
gc+humongous=trace,
jit+compilation=debug
:file=/tmp/app.log
:level,tags,time,uptime
:filesize=104857600,filecount=5

If you want to change Xlog configuration on runtime, you can do it with:

sudo -u JVM_USER jcmd `pgrep -x java` VM.log
output="file=/PATH/TO/gc.log"
output_options="filesize=104857600,filecount=5"
what="codecache=info,codecache+sweep*=trace,class+unload,class+load,os+thread,safepoint,gc*,gc+stringdedup=debug,gc+ergo=trace,gc+age=trace,gc+phases=trace,gc+humongous=trace,jit+compilation=debug"
decorators="level,tags,time,uptime,pid

Current limitations:

  • Logs from JDK 11, 12, 13 - works with flags below, tested on Parallel, CMS and G1.
  • Logs from JDK 9, 10 - should work.
  • Logs from JDK 8 and below - experimental (GC and safepoints log support, charts and stas are not accurate, because this logs sucks), tested on Parallel and G1, doesn't work with CMS
  • For JDK 11+ decorators: level,tags,time,uptime are needed, check sample Xlog configuration above.
  • UI is optimized for Full HD resolution.
  • There is no exception handling at all :)

How to contribute

  • If you have any idea what other charts/tables I can add please create an issue with explanation why this new feature may be helpful
  • If you have logs that doesn't work create an issue with logs included

About

License:Apache License 2.0


Languages

Language:Java 80.5%Language:Groovy 11.2%Language:HTML 7.5%Language:CSS 0.7%Language:Roff 0.0%