As you may be aware in Java 8, one of its feature is removal of Permanent Generation (PermGen).
In this post, we will see how and for what the PermGen was being used till java 7 and its successor in java 8
A Java memory problem such as java.lang.OutOfMemoryError: PermGen space is
one of the most frequent and complex problems a Java EE application
support person can face with a production system. This article is one of the post that will focus on a particular OOM flavour:
PermGen space depletion of a Java HotSpot VM.
In this post, we will see how and for what the PermGen was being used till java 7 and its successor in java 8
A Java memory problem such as java.lang.OutOfMemoryError: PermGen space is
one of the most frequent and complex problems a Java EE application
support person can face with a production system. This article is one of the post that will focus on a particular OOM flavour:
PermGen space depletion of a Java HotSpot VM.
Parameter used: -XXPermSize=1024m
before we see more details about it lets see a memory model in java:
Primary objective is to revisit the fundamentals of the permanent
generation space and to teach you how to identify a particular pattern
of PermGen space problem and possible causes of PermGen memory leak.
java.lang.OutOfMemoryError: PermGen space patterns
Find below some of the most common patterns of OutOfMemoryError due to the depletion of the PermGen space.
Pattern
|
Symptoms
|
Possible root cause scenarios
|
Resolution
|
OOM observed during or after a migration of a Java EE server to newer version
|
- OOM may be observed on server start-up at deployment time
- OOM may be observed very shortly after server start-up and after 1 or 2+ hours of production traffic
|
- Higher PermGen capacity is often required due to increased Java EE server vendor code and libraries
|
- Increase your PermGen space capacity via
-XX:MaxPermSize
|
OOM observed after a certain period of time
|
- OOM observed after a longer but consistent period of time (days)
- PermGen space monitoring will show hourly or daily increase during your application business hours
|
-
There are many possible causes of PermGen space memory leak. The most
common is a class loader leak: increasing number of Class objects
overtime
- Improper JVM arguments like usage of the Xnoclassgc flag (turn OFF Class garbage collection)
|
- Review your JVM HotSpot start-up arguments for any obvious problem like Xnoclassgc flag
- Analyse the JVM HotSpot Heap Dump as it can provides some hints on the source of a class loader leak
- Investigate any third party API you are using for any potential class loader leak defect
- Investigate your application code for any improper use of Reflection API and / or dynamic class loading
|
OOM observed following a redeploy of your application code (EAR, WAR files...)
|
- OOM may be observed during or shortly after your application redeploy process
|
- Unloading and reloading of your application code can lead to PermGen leak (class loader leak) and deplete your PermGen space fairly quickly
|
- Open a ticket with your Java EE vendor for any known class loader leak issue
- Shutdown and restart your server (JVM) post deployment to cleanup any class loader leak
|
In next part we will see more details about metaspace introduced in java 8 as a successor of PermGen.
No comments:
Post a Comment