SlideShare a Scribd company logo
IBM WebSphere Application Server V8.5

Classloader Memory Leak Prevention, Detection &
Remediation




                                                  © 2011 IBM Corporation
Overview




2              © 2011 IBM Corporation
Memory Leak Detection, Prevention and Fixing

 Customers have discovered a number of Classloader & ThreadLocal leaks in
  WebSphere Application Server and their own applications
 We don’t have application level i.e. top down memory leak detection and protection
 Customers want to increase application uptime without cycling the server
 Frequent redeployments of the application result in OOM errors
Existing (v7 & up) PM39870: Improved classloader leak detection.
NEW in v8.5 (Not in Liberty Profile)
 Prevention – Code to proactively fix suspect application classloader leak patterns
 Detection - Recognize Application triggered classloader leaks & provide diagnostics
 Fixing – Leverage existing JDK APIs and reflection to remedy classloader leaks.
 Enabled by setting the setting JVM custom properties




3                                                                                   © 2011 IBM Corporation
Usage scenarios




4                     © 2011 IBM Corporation
Types of Classloader memory leaks

    JRE triggered leaks
The context class loader becomes the web application class loader.
A reference is created to the web application class loader. This reference is never garbage
collected.
Pins the class loader, and all the classes loaded by it, in memory.
Application triggered leaks
Custom ThreadLocal class
Web application class instance as ThreadLocal value
Web application class instance indirectly held through a ThreadLocal value
ThreadLocal pseudo-leak
ContextClassLoader and threads created by web applications
ContextClassLoader and threads created by classes loaded by the common class loader
Static class variables
JDBC driver registration: RMI targets

5                                                                                  © 2011 IBM Corporation
Detection, Prevention and Action

 Detection: Issue warnings when a memory leak is detected
 Prevention is on by default and applies only to JRE triggered leaks.
 Action: Take proactive action to fix memory leaks.
 Actions have reasonable defaults and are configured on a case-by-case
 Pseudo code for clearing leaks
     protected void com.ibm.ws.classloader.clearReferences()
        { if(ENABLE_CLEAR_REFERENCES_JDBC)
                   clearReferencesJdbc();
        if(ENABLE_CLEAR_REFERENCES_THREADS)
                   clearReferencesThreads();
        if(ENABLE_CLEAR_REFERENCES_THREADLOCALS)
                   clearReferencesThreadLocals();
        if(ENABLE_CLEAR_REFERENCES_RMI_TARGETS)
                   clearReferencesRmiTargets();
        if(ENABLE_CLEAR_REFERENCES_STATICS)
                   clearReferencesStaticFinal();
    }

6                                                                         © 2011 IBM Corporation
Memory Leak Policy Configuration


Enabled via JVM custom properties on a per application server /JVM basis
Existing (v7 & up) PM39870: IMPROVED CLASSLOADER LEAK DETECTION.
com.ibm.ws.runtime.detectAppCLLeaks=true

NEW in v8.5 (traditional WAS only, Not in Liberty) Enabled by setting the following JVM
custom properties
com.ibm.ws.runtime.component.MemoryLeakConfig.detectAppCLLeaks
com.ibm.ws.runtime.component.MemoryLeakConfig.clearAppCLLeaks
com.ibm.ws.runtime.component.MemoryLeakConfig.preventJreMemoryLeaks
com.ibm.ws.runtime.component.MemoryLeakConfig.clearReferencesStatic
com.ibm.ws.runtime.component.MemoryLeakConfig.clearReferencesInterruptThreads
com.ibm.ws.runtime.component.MemoryLeakConfig.clearReferencesStopTimerThreads
com.ibm.ws.runtime.component.MemoryLeakConfig.clearReferencesThreadLocal




7                                                                                © 2011 IBM Corporation
Persisted Leak Policy configuration in server.xml

<jvmEntries xmi:id="JavaVirtualMachine_1183122130078" verboseModeClass="true"
verboseModeGarbageCollection="true" verboseModeJNI="false"
runHProf="false" hprofArguments="" debugMode="false" debugArgs="-
agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7777"
genericJvmArguments="-agentlib:getClasses -Xquickstart -Xalwaysclassgc"
executableJarFileName="" disableJIT="false">
   <systemProperties xmi:id="Property_1317048628648"
   name="com.ibm.ws.runtime.component.MemoryLeakConfig.detectAppCLLeaks"
   value="true"/>
   <systemProperties xmi:id="Property_1318975518491"
   name="com.ibm.ws.runtime.component.MemoryLeakConfig.clearAppCLLeaks"
   value="true"/>
   <systemProperties xmi:id="Property_1318955284241"
   name="com.ibm.ws.runtime.component.MemoryLeakConfig.generateSystemDumps“
   value="false"/>
   <systemProperties xmi:id="Property_1319119976147"
   name="com.ibm.ws.runtime.component.MemoryLeakConfig.generateHeapDumps“
   value="true"/>
   <systemProperties xmi:id="Property_1317048628649"
   name="com.ibm.ws.runtime.component.MemoryLeakConfig.monitorSystemApps“
   value="false"/>
</jvmEntries>




8                                                                    © 2011 IBM Corporation
Memory Leak Configuration mbean
All the attributes of the Type MemoryLeakConfig mbean
Attribute                         Type                  Access
JvmThreadGroupNames               java.lang.String      RW
FilterPrefixes                    java.lang.String      RW
RenewThreadPoolNames              java.lang.String      RW
DetectAppCLLeaks                  boolean               RW
ClearAppCLLeaks                   boolean               RW
MonitorSystemApps                 boolean               RW
NoDumps                           boolean               RW
GenerateHeapDumps                 boolean               RW
GenerateSystemDumps               boolean               RW
ClearReferencesStatic             boolean               RW
ClearReferencesInterruptThreads     boolean             RW
ClearReferencesStopTimerThreads     boolean             RW
ClearReferencesHttpClientKeepAliveThread      boolean   RW
ClearReferencesThreadLocal        boolean               RW
LeakSweeperDelay                  int                   RW
ThreadPoolRenewalDelayFactor      int                   RW
PreventJreMemoryLeaks             boolean               RW
LeakConfiguration                 java.lang.String      RO
9                                                                © 2011 IBM Corporation
Memory Leak Runtime mbean

# Look at all the operations of the MemoryLeakAdmin mbean
wsadmin>$Help all $leakAdmin
Name:
WebSphere:cell=smitaNode03Cell,name=LeakAdmin,type=MemoryLeakAdmin,node=smitaNo
de03,process=server1
        Description: Information on the management interface of the MBean
        Class name: com.ibm.ws.runtime.component.MemoryLeakAdmin

Operation
java.lang.String findLeaks()
java.lang.String fixLeaks()
java.lang.String fixLeaks(java.lang.String)




10                                                                    © 2011 IBM Corporation
Leak Detection & Fixing Messages

 CWMML0015E: The web application [WasSwat#WasSwatWeb.war] created a
  ThreadLocal with key of type [test.memleak.MyThreadLocal] (value
  [test.memleak.MyThreadLocal@216c691]) and a value of type
  [test.memleak.MyCounter] (value [test.memleak.MyCounter@21942ff])
  but failed to remove it when the web application was stopped.
 CWMML0010E: The web application [LeakApp#leak.war] appears to have
  started a thread named [Thread-73] but has failed to stop it.
 CWMML0011E: The web application [LeakApp#leak.war] appears to have
  started a TimerThread named [leaked-thread] via the java.util.Timer
  API but has failed to stop it.
 CWMML0024W: About to interrupt thread [leakingThread] which is
  currently executing
 CWMML0026I: ClassLoader memory leak is fixed. Clearing leak
  References succeeded for LeakApp#leak.war.




11                                                              © 2011 IBM Corporation
Demonstration




12                   © 2011 IBM Corporation
Summary




13             © 2011 IBM Corporation
Summary

 Improves resiliency and general robustness of the application server by fixing application
  and WebSphere system memory leaks
 Simple configuration and runtime administration via Dynamic mbeans and JVM custom
  properties
Feature exists in two parts
 First, it prevents memory leaks through a life-cycle listener that calls various parts of the
  Java API. Its common that if the web application is the first code to call the Java APIs, the
  web application class loader will be pinned in memory, causing leaks. The listener ensures
  that WebSphere core runtime is the first to make a call, and therefore prevents the class
  loader from being pinned in memory.
 Second, it handles detection by executing code when a web application is stopped,
  undeployed or reloaded. It scans the code for standard causes of memory leaks, and where
  it can, fixes the leaks. Implemented in the WebSphere Application Classloader, there are a
  series of expandable, standard API calls and some reflection tricks that help this detection
  feature do its job.




14                                                                                   © 2011 IBM Corporation
References
 Memory leaks in Java Platform, Enterprise Edition applications
 http://thegreatgazoo.raleigh.ibm.com/infocenter85/topic/com.ibm.websphere.nd.multiplatfo
 Configuring the memory leak policy
 http://thegreatgazoo.raleigh.ibm.com/infocenter85/index.jsp?topic=/com.ibm.websphere.n




15                                                                         © 2011 IBM Corporation
Feedback



Your feedback is valuable
You can help improve the quality of IBM Education Assistant content to better meet your
 needs by providing feedback.
 Did you find this module useful?
 Did it help you solve a problem or answer a question?
 Do you have suggestions for improvements?


                                         Click to send email feedback:
         mailto:iea@us.ibm.com?subject=Feedback_about_WAS_..........................................ppt


      This module is also available in PDF format at: ../WAS_......................................................pdf




16                                                                                                             © 2011 IBM Corporation

More Related Content

DOCX
Analisis air widya
PDF
Pronomi e aggettivi determinativi
PDF
BIS2C. Biodiversity and the Tree of Life. 2014. L14. Fungi
PDF
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
PDF
النهر والموت.pdf
PDF
PDF
Les mots technique de bâtiment pdf
PDF
2017 k8s and OpenStack-Helm
Analisis air widya
Pronomi e aggettivi determinativi
BIS2C. Biodiversity and the Tree of Life. 2014. L14. Fungi
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
النهر والموت.pdf
Les mots technique de bâtiment pdf
2017 k8s and OpenStack-Helm

Viewers also liked (20)

PPTX
IBM WebSphere Application Server version to version comparison
PDF
IBM WebSphere application server
PPTX
Websphere Application Server V8.5
ODP
IBM Lotusphere 2013 AD109: Using the IBM® Sametime® Proxy SDK: WebSphere Port...
PDF
WebSphere Application Server JBoss TCO analysis
PPT
An introduction to mq light and bluemix
PPT
Ibm mq appliance slideshare
PPTX
MQ Light in IBM MQ: IBM Interconnect 2015 session AME4182
PDF
AD109 - Using the IBM Sametime Proxy SDK: WebSphere Portal, IBM Connections -...
PPTX
Messaging in the Cloud with IBM MQ Light and IBM Bluemix
PPTX
ClassLoader Leaks
PDF
MQ What's New Beyond V8 - V8003 level
PDF
Liberty dynacache ffw_iea_ste
PDF
What's new in IBM MQ Messaging
PPTX
WebSphere Application Server Liberty Profile and Docker
PPTX
Jboss Tutorial Basics
PPT
websphere MQ training Online
PDF
WebSphere Technical University: Top WebSphere Problem Determination Features
PPT
IBM MQ Online Tutorials
PDF
JBoss Application Server 7
IBM WebSphere Application Server version to version comparison
IBM WebSphere application server
Websphere Application Server V8.5
IBM Lotusphere 2013 AD109: Using the IBM® Sametime® Proxy SDK: WebSphere Port...
WebSphere Application Server JBoss TCO analysis
An introduction to mq light and bluemix
Ibm mq appliance slideshare
MQ Light in IBM MQ: IBM Interconnect 2015 session AME4182
AD109 - Using the IBM Sametime Proxy SDK: WebSphere Portal, IBM Connections -...
Messaging in the Cloud with IBM MQ Light and IBM Bluemix
ClassLoader Leaks
MQ What's New Beyond V8 - V8003 level
Liberty dynacache ffw_iea_ste
What's new in IBM MQ Messaging
WebSphere Application Server Liberty Profile and Docker
Jboss Tutorial Basics
websphere MQ training Online
WebSphere Technical University: Top WebSphere Problem Determination Features
IBM MQ Online Tutorials
JBoss Application Server 7
Ad

Similar to Classloader leak detection in websphere application server (20)

PDF
Fight with Metaspace OOM
PPTX
A topology of memory leaks on the JVM
PDF
Web Sphere Problem Determination Ext
PPTX
Debugging java deployments_2
PDF
JavaOne 2013: Garbage Collection Unleashed - Demystifying the Wizardry
PDF
Debugging Java from Dumps
PDF
What Your Jvm Has Been Trying To Tell You
PDF
Memory Leak In java
PDF
TechGIG_Memory leaks in_java_webnair_26th_july_2012
PDF
MySafe
DOC
Garbage Collection, Tuning And Monitoring JVM In EBS 11i And R12
ODP
2829 liberty
PDF
JavaOne 2014: Java Debugging
PDF
Who Took The Cookie From The Cookie Jar?
PPTX
Application Profiling for Memory and Performance
ODP
Java Garbage Collection, Monitoring, and Tuning
PPTX
Memory leak workshop
PDF
Java performance - not so scary after all
PPTX
Ibm file system
PPTX
Memory leak
Fight with Metaspace OOM
A topology of memory leaks on the JVM
Web Sphere Problem Determination Ext
Debugging java deployments_2
JavaOne 2013: Garbage Collection Unleashed - Demystifying the Wizardry
Debugging Java from Dumps
What Your Jvm Has Been Trying To Tell You
Memory Leak In java
TechGIG_Memory leaks in_java_webnair_26th_july_2012
MySafe
Garbage Collection, Tuning And Monitoring JVM In EBS 11i And R12
2829 liberty
JavaOne 2014: Java Debugging
Who Took The Cookie From The Cookie Jar?
Application Profiling for Memory and Performance
Java Garbage Collection, Monitoring, and Tuning
Memory leak workshop
Java performance - not so scary after all
Ibm file system
Memory leak
Ad

More from Rohit Kelapure (20)

PDF
API First or Events First: Is it a Binary Choice?
PDF
External should that be a microservice
PDF
Should That Be a Microservice ?
PPTX
Travelers 360 degree health assessment of microservices on the pivotal platform
PDF
SpringOne Platform 2018 Recap in 5 minutes
PDF
Migrate Heroku & OpenShift Applications to IBM BlueMix
PDF
Liberty Buildpack: Designed for Extension - Integrating your services in Blue...
PDF
A Deep Dive into the Liberty Buildpack on IBM BlueMix
PDF
1812 icap-v1.3 0430
PDF
Dynacache in WebSphere Portal Server
PPTX
2012 04-09-v2-tdp-1167-cdi-bestpractices-final
PDF
2012 04-06-v2-tdp-1163-java e-evsspringshootout-final
PPTX
2012 04-09-v2-tdp-1167-cdi-bestpractices-final
DOC
Web sphere application server performance tuning workshop
PPT
Performance tuningtoolkitintroduction
PDF
IBM Health Center Details
PPTX
Java EE vs Spring Framework
ODP
Caching technology comparison
PPT
SIBus Tuning for production WebSphere Application Server
PPT
First Failure Data Capture for your enterprise application with WebSphere App...
API First or Events First: Is it a Binary Choice?
External should that be a microservice
Should That Be a Microservice ?
Travelers 360 degree health assessment of microservices on the pivotal platform
SpringOne Platform 2018 Recap in 5 minutes
Migrate Heroku & OpenShift Applications to IBM BlueMix
Liberty Buildpack: Designed for Extension - Integrating your services in Blue...
A Deep Dive into the Liberty Buildpack on IBM BlueMix
1812 icap-v1.3 0430
Dynacache in WebSphere Portal Server
2012 04-09-v2-tdp-1167-cdi-bestpractices-final
2012 04-06-v2-tdp-1163-java e-evsspringshootout-final
2012 04-09-v2-tdp-1167-cdi-bestpractices-final
Web sphere application server performance tuning workshop
Performance tuningtoolkitintroduction
IBM Health Center Details
Java EE vs Spring Framework
Caching technology comparison
SIBus Tuning for production WebSphere Application Server
First Failure Data Capture for your enterprise application with WebSphere App...

Recently uploaded (20)

PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
KodekX | Application Modernization Development
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Empathic Computing: Creating Shared Understanding
PDF
Encapsulation theory and applications.pdf
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Machine learning based COVID-19 study performance prediction
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Approach and Philosophy of On baking technology
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Per capita expenditure prediction using model stacking based on satellite ima...
Dropbox Q2 2025 Financial Results & Investor Presentation
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Building Integrated photovoltaic BIPV_UPV.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
KodekX | Application Modernization Development
Spectral efficient network and resource selection model in 5G networks
Empathic Computing: Creating Shared Understanding
Encapsulation theory and applications.pdf
MYSQL Presentation for SQL database connectivity
Machine learning based COVID-19 study performance prediction
MIND Revenue Release Quarter 2 2025 Press Release
Encapsulation_ Review paper, used for researhc scholars
Approach and Philosophy of On baking technology
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Diabetes mellitus diagnosis method based random forest with bat algorithm

Classloader leak detection in websphere application server

  • 1. IBM WebSphere Application Server V8.5 Classloader Memory Leak Prevention, Detection & Remediation © 2011 IBM Corporation
  • 2. Overview 2 © 2011 IBM Corporation
  • 3. Memory Leak Detection, Prevention and Fixing  Customers have discovered a number of Classloader & ThreadLocal leaks in WebSphere Application Server and their own applications  We don’t have application level i.e. top down memory leak detection and protection  Customers want to increase application uptime without cycling the server  Frequent redeployments of the application result in OOM errors Existing (v7 & up) PM39870: Improved classloader leak detection. NEW in v8.5 (Not in Liberty Profile)  Prevention – Code to proactively fix suspect application classloader leak patterns  Detection - Recognize Application triggered classloader leaks & provide diagnostics  Fixing – Leverage existing JDK APIs and reflection to remedy classloader leaks.  Enabled by setting the setting JVM custom properties 3 © 2011 IBM Corporation
  • 4. Usage scenarios 4 © 2011 IBM Corporation
  • 5. Types of Classloader memory leaks JRE triggered leaks The context class loader becomes the web application class loader. A reference is created to the web application class loader. This reference is never garbage collected. Pins the class loader, and all the classes loaded by it, in memory. Application triggered leaks Custom ThreadLocal class Web application class instance as ThreadLocal value Web application class instance indirectly held through a ThreadLocal value ThreadLocal pseudo-leak ContextClassLoader and threads created by web applications ContextClassLoader and threads created by classes loaded by the common class loader Static class variables JDBC driver registration: RMI targets 5 © 2011 IBM Corporation
  • 6. Detection, Prevention and Action  Detection: Issue warnings when a memory leak is detected  Prevention is on by default and applies only to JRE triggered leaks.  Action: Take proactive action to fix memory leaks.  Actions have reasonable defaults and are configured on a case-by-case  Pseudo code for clearing leaks protected void com.ibm.ws.classloader.clearReferences() { if(ENABLE_CLEAR_REFERENCES_JDBC) clearReferencesJdbc(); if(ENABLE_CLEAR_REFERENCES_THREADS) clearReferencesThreads(); if(ENABLE_CLEAR_REFERENCES_THREADLOCALS) clearReferencesThreadLocals(); if(ENABLE_CLEAR_REFERENCES_RMI_TARGETS) clearReferencesRmiTargets(); if(ENABLE_CLEAR_REFERENCES_STATICS) clearReferencesStaticFinal(); } 6 © 2011 IBM Corporation
  • 7. Memory Leak Policy Configuration Enabled via JVM custom properties on a per application server /JVM basis Existing (v7 & up) PM39870: IMPROVED CLASSLOADER LEAK DETECTION. com.ibm.ws.runtime.detectAppCLLeaks=true NEW in v8.5 (traditional WAS only, Not in Liberty) Enabled by setting the following JVM custom properties com.ibm.ws.runtime.component.MemoryLeakConfig.detectAppCLLeaks com.ibm.ws.runtime.component.MemoryLeakConfig.clearAppCLLeaks com.ibm.ws.runtime.component.MemoryLeakConfig.preventJreMemoryLeaks com.ibm.ws.runtime.component.MemoryLeakConfig.clearReferencesStatic com.ibm.ws.runtime.component.MemoryLeakConfig.clearReferencesInterruptThreads com.ibm.ws.runtime.component.MemoryLeakConfig.clearReferencesStopTimerThreads com.ibm.ws.runtime.component.MemoryLeakConfig.clearReferencesThreadLocal 7 © 2011 IBM Corporation
  • 8. Persisted Leak Policy configuration in server.xml <jvmEntries xmi:id="JavaVirtualMachine_1183122130078" verboseModeClass="true" verboseModeGarbageCollection="true" verboseModeJNI="false" runHProf="false" hprofArguments="" debugMode="false" debugArgs="- agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7777" genericJvmArguments="-agentlib:getClasses -Xquickstart -Xalwaysclassgc" executableJarFileName="" disableJIT="false"> <systemProperties xmi:id="Property_1317048628648" name="com.ibm.ws.runtime.component.MemoryLeakConfig.detectAppCLLeaks" value="true"/> <systemProperties xmi:id="Property_1318975518491" name="com.ibm.ws.runtime.component.MemoryLeakConfig.clearAppCLLeaks" value="true"/> <systemProperties xmi:id="Property_1318955284241" name="com.ibm.ws.runtime.component.MemoryLeakConfig.generateSystemDumps“ value="false"/> <systemProperties xmi:id="Property_1319119976147" name="com.ibm.ws.runtime.component.MemoryLeakConfig.generateHeapDumps“ value="true"/> <systemProperties xmi:id="Property_1317048628649" name="com.ibm.ws.runtime.component.MemoryLeakConfig.monitorSystemApps“ value="false"/> </jvmEntries> 8 © 2011 IBM Corporation
  • 9. Memory Leak Configuration mbean All the attributes of the Type MemoryLeakConfig mbean Attribute Type Access JvmThreadGroupNames java.lang.String RW FilterPrefixes java.lang.String RW RenewThreadPoolNames java.lang.String RW DetectAppCLLeaks boolean RW ClearAppCLLeaks boolean RW MonitorSystemApps boolean RW NoDumps boolean RW GenerateHeapDumps boolean RW GenerateSystemDumps boolean RW ClearReferencesStatic boolean RW ClearReferencesInterruptThreads boolean RW ClearReferencesStopTimerThreads boolean RW ClearReferencesHttpClientKeepAliveThread boolean RW ClearReferencesThreadLocal boolean RW LeakSweeperDelay int RW ThreadPoolRenewalDelayFactor int RW PreventJreMemoryLeaks boolean RW LeakConfiguration java.lang.String RO 9 © 2011 IBM Corporation
  • 10. Memory Leak Runtime mbean # Look at all the operations of the MemoryLeakAdmin mbean wsadmin>$Help all $leakAdmin Name: WebSphere:cell=smitaNode03Cell,name=LeakAdmin,type=MemoryLeakAdmin,node=smitaNo de03,process=server1 Description: Information on the management interface of the MBean Class name: com.ibm.ws.runtime.component.MemoryLeakAdmin Operation java.lang.String findLeaks() java.lang.String fixLeaks() java.lang.String fixLeaks(java.lang.String) 10 © 2011 IBM Corporation
  • 11. Leak Detection & Fixing Messages  CWMML0015E: The web application [WasSwat#WasSwatWeb.war] created a ThreadLocal with key of type [test.memleak.MyThreadLocal] (value [test.memleak.MyThreadLocal@216c691]) and a value of type [test.memleak.MyCounter] (value [test.memleak.MyCounter@21942ff]) but failed to remove it when the web application was stopped.  CWMML0010E: The web application [LeakApp#leak.war] appears to have started a thread named [Thread-73] but has failed to stop it.  CWMML0011E: The web application [LeakApp#leak.war] appears to have started a TimerThread named [leaked-thread] via the java.util.Timer API but has failed to stop it.  CWMML0024W: About to interrupt thread [leakingThread] which is currently executing  CWMML0026I: ClassLoader memory leak is fixed. Clearing leak References succeeded for LeakApp#leak.war. 11 © 2011 IBM Corporation
  • 12. Demonstration 12 © 2011 IBM Corporation
  • 13. Summary 13 © 2011 IBM Corporation
  • 14. Summary  Improves resiliency and general robustness of the application server by fixing application and WebSphere system memory leaks  Simple configuration and runtime administration via Dynamic mbeans and JVM custom properties Feature exists in two parts  First, it prevents memory leaks through a life-cycle listener that calls various parts of the Java API. Its common that if the web application is the first code to call the Java APIs, the web application class loader will be pinned in memory, causing leaks. The listener ensures that WebSphere core runtime is the first to make a call, and therefore prevents the class loader from being pinned in memory.  Second, it handles detection by executing code when a web application is stopped, undeployed or reloaded. It scans the code for standard causes of memory leaks, and where it can, fixes the leaks. Implemented in the WebSphere Application Classloader, there are a series of expandable, standard API calls and some reflection tricks that help this detection feature do its job. 14 © 2011 IBM Corporation
  • 15. References  Memory leaks in Java Platform, Enterprise Edition applications  http://thegreatgazoo.raleigh.ibm.com/infocenter85/topic/com.ibm.websphere.nd.multiplatfo  Configuring the memory leak policy  http://thegreatgazoo.raleigh.ibm.com/infocenter85/index.jsp?topic=/com.ibm.websphere.n 15 © 2011 IBM Corporation
  • 16. Feedback Your feedback is valuable You can help improve the quality of IBM Education Assistant content to better meet your needs by providing feedback.  Did you find this module useful?  Did it help you solve a problem or answer a question?  Do you have suggestions for improvements? Click to send email feedback: mailto:[email protected]?subject=Feedback_about_WAS_..........................................ppt This module is also available in PDF format at: ../WAS_......................................................pdf 16 © 2011 IBM Corporation

Editor's Notes

  • #2: This presentation describes support for Memory leak detection, prevention and Remediation included in IBM WebSphere Application Server V8.5 WebSphere Application Server Version 8.5 provides a top down pattern-based memory leak detection, prevention, and action by watching for suspect patterns in application code at run time. WebSphere Application Server has some means of protection against memory leaks when stopping or redeploying applications. If leak detection, prevention and action are enabled, WebSphere Application Server monitors application and module activity performs diagnostic actions to detect and fix leaks when an application or an individual module stops. This feature helps in increasing application up time with frequent application redeployments without cycling the server.
  • #3: What will nameOfFeature do for you?
  • #4: WebSphere Application Server now has some means of protection against memory leaks when stopping or redeploying applications. WebSphere Application Server monitors application and module activity and performs diagnostic actions when an application or an individual module is stopped.
  • #5: nameOfFeature is used in the following scenarios.
  • #6: Class loader memory leak Many memory leaks manifest themselves as class loader leaks. A Java class is uniquely identified by its name and the class loader that loaded it. Classes with the same name can be loaded multiple times in a single JVM, each in a different class loader. Each web application gets its own class loader and this is what WebSphere Application Server uses for isolating applications. An object retains a reference to the class it is an instance of. A class retains a reference to the class loader that loaded it. The class loader retains a reference to every class it loaded. Retaining a reference to a single object from a web application pins every class loaded by the web application. These references often remain after a web application reload. With each reload, more classes are pinned which leads to an out of memory error. Class loader memory leaks are normally caused by the application code or JRE triggered code. JRE triggered leaks Memory leaks occur when Java Runtime Environment (JRE) code uses the context class loader to load an application singleton. These singletons can be threads or other objects that are loaded by the JRE using the context class loader. If the web application code triggers the initialization of a singleton or a static initializer, the following conditions apply:The context class loader becomes the web application class loader. A reference is created to the web application class loader. This reference is never garbage collected. Pins the class loader, and all the classes loaded by it, in memory. Application triggered leaks Categories of application triggered leaks are as follows:Custom ThreadLocal class Web application class instance as ThreadLocal value Web application class instance indirectly held through a ThreadLocal value ThreadLocal pseudo-leak ContextClassLoader and threads created by web applications ContextClassLoader and threads created by classes loaded by the common class loader Static class variables JDBC driver registration: RMI targets For more information on application triggered links, see http://wasdynacache.blogspot.com/2012/01/websphere-classloader-memory-leak.html , http://www.websphereusergroup.org.uk/wug/files/presentations/31/Ian_Partridge_-_WUG_classloader_leaks.pdf , and http://www.ibm.com/support/docview.wss?uid=swg1PM39870 .
  • #7: Detection: Issue warnings when a memory leak is detected. Through a combination of standard API calls and some reflection tricks when a web application is stopped, undeployed or reloaded. Prevention is on by default and applies only to JRE triggered leaks. JRE triggered leaks are prevented by initializing singletons at server startup, when the application Server class loader is the context class loader. Action: Take proactive action to fix memory leaks. These actions have reasonable defaults and are configured on a case-by-case basis.protected. Page of 32
  • #8: The MemoryLeak service and its mbean are active only in an application server that hosts applications and services requests. This service is not active on a Deployment Manager, node agent, administrative agent, or other servers types like WebSphere proxy server and so on. The leak detection option is disabled by default. You can use Java virtual machine (JVM) custom properties to adjust the leak policy values, such as, enable and disable leak detection, action, and prevention. These custom properties are only applicable to a stand-alone server or managed application server and not to a node agent, admin agent, job manager, or deployment manager. When the application or the server is shutting down, WebSphere Application Server determines the classloaders that have leaked and are held references to all of associated loaded classes and objects. If a classloader leak is detected, a heapdump or systemdump is taken. All persistent configurations of this service are completed using JVM custom properties. There are no administrative console panels. At runtime, use the MemoryLeakConfig and MemoryLeakAdmin mbeans for configuration and administration respectively; however, the configuration changes are not persisted until JVM custom properties are configured. Page of 32
  • #9: These JVM custom properties are persisted in the WebSphere Application Server configuration model in the server.xml file. The following code snippet displays the persisted leak policy configuration from the server_home /config/cells/nodes/servers/server.xml file of an unmanaged server: Page of 32
  • #10: At runtime the memory leak detection, prevention and policy configuration can be changed using the MemoryLeakConfig mbean. Administration of the Memory leak policy can be carried out using the MemoryLeakAdmin mbean. The leak policy affects how the application server responds to a classloader memory leak when an application or when the server is stopped. You can adjust the Memory leak policy settings by using the wsadmin scripting interface. These changes take effect immediately, but do not persist to the server configuration, and are lost when the server is restarted. Page of 32
  • #11: Mbean operations that are exposed to customers to find and fix leaks at runtime via the MemoryLeakAdmin mbean. Page of 32
  • #12: A sampling of the different types of leak warnings output when a memory leak is detected. Page of 32
  • #14: To recap,..
  • #15: This feature exists in two parts. First, it prevents memory leaks through life-cycle that calls various parts of the Java API. Its common that if the web application is the first code to call the Java APIs, the web application class loader will be pinned in memory, causing leaks. The listener ensures that WebSphere Application Server is the first to make a call, and therefore prevents the class loader from being pinned in memory. Second, it handles detection by executing code when a web application is stopped, undeployed or reloaded. It scans the code for standard causes of memory leaks, and where it can, fixes the leaks. Implemented in the WebSphere Application Classloader, there are a series of expandable, standard API calls and some reflection tricks that help this detection feature do its job.
  • #16: See the following references for additional information about nameOfFeature
  • #17: You can help improve the quality of IBM Education Assistant content by providing feedback.