Home Java Fix Java memory leaks without costly JVM heap dumps

Fix Java memory leaks without costly JVM heap dumps

9 min read

JVM reminiscence leak detection

I don’t know anybody that likes investigating a Java heap dump.

They are often huge –  actually a number of gigs in dimension. They include a lot info that figuring out the reason for a JVM reminiscence leak may be like trying to find a needle in a haystack.

Java reminiscence leaks are simply detected by JDK Mission Management.

And the truth that inspecting a Java heap dump from a manufacturing system may need you unwittingly in possession of personally identifiable info that would get you in hassle with numerous privateness acts if mishandled makes your complete file really feel radioactive.

I’d say inspecting a Java heap dump merely wasn’t well worth the hassle, if it wasn’t for the truth that doing so is just about the one solution to repair Java reminiscence leaks in your JVM. Or no less than it was the one manner till the Java Flight Recorder launched the Previous Object Pattern occasion.

JVM heap evaluation with Java Flight Recorder

Right here’s how the Java Flight Recorder’s Previous Object Pattern occasion works.

When a recording is began, a hard and fast variety of objects from the Java heap are tracked. Tracked properties of the Java heap objects embrace:

  • Object’s allocation begin time
  • Object’s period
  • Related occasion thread
  • Final recognized heap dimension utilization
  • Object sort
  • Rubbish assortment root

It’s potential to regulate the variety of objects on the Java heap tracked by Flight Recorder by adjusting the previous object queue website:

-XX:FlightRecordingOptions=old-object-queue-size=512

JDK Mission Management reminiscence leak detection

When a tracked object on the Java heap is rubbish collected, it’s faraway from the pattern and a brand new one added. Over time, objects which have causes a reminiscence leak usually tend to get tracked. The longer the JVM Flight Recorder runs, the extra doubtless reminiscence leak inducing objects are to be tracked.

Moreover, the longer these objects that trigger a Java reminiscence leak exist, and the extra reminiscence they devour, the extra evident their existence can be when it comes time to look at the JVM Flight Recording in Java Mission Management.

Java Mission Control Garbage GC

Java Mission Management reveals rampant rubbish assortment routines hurting efficiency when autoboxing is used.

Moreover, the principles engine inside Java Mission Management is able to figuring out which long-running Java heap objects are almost definitely to be contributing to a JVM reminiscence leak.

Discover how a after a Java Flight Recorder run on a pattern software designed to set off a reminiscence leak, Java Mission Management instantly signifies that an object monitored by means of the Previous Object Pattern occasion is probably going the perpetrator:

The dwell set on the heap appears to extend with a velocity of about 192 KiB per second throughout the recording.

An evaluation of the reference tree discovered 1 leak candidates. The primary candidate is java.util.Hashtable$Entry[] Referenced by this chain:

  • java.util.Hashtable.desk
  • se.hirt.jmc.tutorial.memleak.Leak$DemoThread.desk

Dwell Objects on the Java Heap

Together with the preliminary automated evaluation, Java Mission Management will present an inventory indicating the dimensions of all lively gadgets on the heap, together with an inventory of all dwell objects in reminiscence. As you may see, with out the necessity to resort to a JVM heap dump, a Java reminiscence leak has been simply recognized.

Java memory leak java heap dump

A JVM Flight Recorder run may also help determine Java reminiscence leaks with out a heap dump.

Reminiscence leak detection finest practices

Clearly the instance within the reminiscence leak detection instance is an easy one. To determine offending objects in a extra difficult instance, comply with these reminiscence leak detection finest practices:

  • Run Java Flight Recorder for prolonged intervals of time.
    • This will increase the change of an offending object to get sampled.
    • Take a look at objects consuming probably the most reminiscence on the JVM
  • Take a look at the objects consuming probably the most reminiscence on the JVM
  • De-prioritize objects allotted at JVM startup. Course of initialization can create a whole lot of noise.
  • Objects allotted in the direction of the center of a Flight Recorder run are extra doubtless culprits than these allotted originally or finish
  • Monitor daemon threads referenced externally by Java classloaders
  • Keep watch over:
    • Static variables
    • Cached knowledge
    • Lengthy working threads
  • Add customized triggers to begin Java Flight Recorder when sure reminiscence consumption thresholds are met
  • Add telemetry to your Java functions by coding customized Flight Recorder occasions and beginning them at potential downside factors
  • Be proactive and monitor functions for reminiscence points earlier than they turn into a severity 1 manufacturing downside

JVM Flight Recorder and JDK Mission Management

The JVM Flight Recorder and JDK Mission Management present quite a lot of superior options that enable builders to troubleshoot Java reminiscence leaks with out the necessity to examine difficult Java heap dumps. Get conversant in these highly effective profiling and monitoring instruments, and troubleshooting Java efficiency issues will stop to be a cumbersome job.

The code used within the Java leak detection instance comes from Marcus Hirt’s JMC tutorial. Discover out extra from Marcus Hirt’s weblog.

Leave a Reply

Your email address will not be published. Required fields are marked *

Check Also

Join Huawei’s #DoAnything Campaign for a chance to win PHP 50,000

MANILA, Philippines, March 3, 2021 /PRNewswire/ — Huawei Cell Providers (HMS) introd…