Shenandoah GC myth or reality on the production ?

Hi awesome community, 

 

Today I would like to share with you so small topic about usage Garbage Collectors in production (GC Strategies). 

At the moment, most popular in Hotspot JVM is G1 GC, after CMS  and rising star is Shenandoah GC.

 So in this topic I will describe how to migrate to Shenandoah GC. If you already on adoptJDK. 

And please, keep in your mind that small tutorial related to the Java 8, as my instance is not fully ready for new Java. (But please, be informed in your version Java works better and Shenandoah significantly improved as well.)

 

 Let’s start. 

  • All, my JDK. JRE used in the located in one place, like /usr/java and use frequently the symbolic links.

image.png

wget -c https://builds.shipilev.net/openjdk-shenandoah-jdk8/openjdk-shenandoah-jdk8-latest-linux-x86_64-release.tar.xz

  • Next step is extract into  
tar -xvf openjdk-shenandoah-jdk8-latest-linux-x86_64-release.tar.xz
  • Before change link let’s prepare our Jira instance. 
  1. Commented arguments, (about that arguments you can read here Flight Recorder)image.png

  2. JVM_SUPPORT_RECOMMENDED_ARGS="-XX:+UnlockCommercialFeatures -XX:+FlightRecorder"
  1. So let’s check my previous GC Strategy:
JVM_GC_STRATEGY="-server -Xss2048k -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UseStringDeduplication -XX:+PrintStringDeduplicationStatistics -XX:ConcGCThreads=8  -XX:ParallelGCThreads=24 -XX:ReservedCodeCacheSize=1024m -XX:+ExplicitGCInvokesConcurrent -XX:MaxMetaspaceSize=2048m"

2.1. Hence I removed the next parameters (it’s result of GC, thread, heap dump analysis tools analyzing): 

 -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ConcGCThreads=8  -XX:ParallelGCThreads=24

2.2. Added

-XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC

2.3. Finally, GC Strategy is: 

JVM_GC_STRATEGY="-server -Xss2048k -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+UseStringDeduplication -XX:+PrintStringDeduplicationStatistics  -XX:MaxMetaspaceSize=2048m -XX:ReservedCodeCacheSize=1024m -XX:+ExplicitGCInvokesConcurrent "

 

About String Deduplication you can read here (Decrease Heap size)

  • Let’s run that easy pipeline command:
systemctl stop jira && unlink latest && ln -s j2sdk-image latest && systemctl start jira

As result in a few minutes you see in your logs that in need full info. (and Jira visible through browser)

 

That’s all.

Conclusion: Shenandoah has interesting extra options, but in my tests it was hard to understand a significant differences. But the default one, 

 

Hope it helps. 

If you interested I can share in the some metrics and charts of using Shenandoah and G1.

 

References:



Cheers,

Gonchik Tsymzhitov

2 comments

M Amine
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
October 1, 2020

yes really interested. Please share metrics and charts.

Like Gonchik Tsymzhitov likes this
Gonchik Tsymzhitov
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
January 13, 2021

@M Amine  Sorry, for the delay. 

What kind of metrics would you like to see? :) 

I can start from CPU usage, GC pause etc. 

Comment

Log in or Sign up to comment
TAGS
AUG Leaders

Atlassian Community Events