Uploaded image for project: 'JBoss Enterprise Application Platform'
  1. JBoss Enterprise Application Platform
  2. JBEAP-23627

[GSS](7.4.z) WFLY-16412 - Failed deployment leaves classloader leaks through undertow references

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Minor Minor
    • 7.4.8.GA, 7.4.8.CR1
    • 7.4.4.GA
    • Undertow
    • None
    • False
    • None
    • False
    • Hide

      1. Attempt to deploy the failedappleak.war some number of times for failed deployment attempts.
      2. Obtain a heap dump after and use an OQL like below to see the number of leaked classloaders that accumulated and can be traced to previously noted references:

      SELECT * FROM org.jboss.modules.ModuleClassLoader WHERE (module.name.value.toString() LIKE "deployment.failedappleak.war")
      
      Show
      1. Attempt to deploy the failedappleak.war some number of times for failed deployment attempts. 2. Obtain a heap dump after and use an OQL like below to see the number of leaked classloaders that accumulated and can be traced to previously noted references: SELECT * FROM org.jboss.modules.ModuleClassLoader WHERE (module.name.value.toString() LIKE "deployment.failedappleak.war" )

      If a deployment fails (such as an exception in a ServletContextListener.contextInitialized call), the contextDestroyed method is not invoked on listeners so anything depending on that for clean up is missed and leaves leaks. That means we miss clean up in https://github.com/wildfly/wildfly/blob/main/undertow/src/main/java/org/wildfly/extension/undertow/deployment/UndertowDeploymentInfoService.java#L960 and https://github.com/undertow-io/undertow/blob/master/websockets-jsr/src/main/java/io/undertow/websockets/jsr/Bootstrap.java#L132

      This leaves the classloader leaked from activities references in the SuspendController:

      Class Name                                                                                              | Ref. Objects | Shallow Heap | Ref. Shallow Heap | Retained Heap
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      value org.jboss.as.server.suspend.SuspendController @ 0x4c2130d20                                       |          550 |           48 |            48,400 |         3,496
      '- activities java.util.ArrayList @ 0x4c2130d68                                                         |          550 |           24 |            48,400 |         3,336
         '- elementData java.lang.Object[823] @ 0x56eda0df8                                                   |          550 |        3,312 |            48,400 |         3,312
            |- [148] org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$2 @ 0x579164a68  |            1 |           24 |                88 |            24
            |  '- this$0 org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService @ 0x51276a370|            1 |          176 |                88 |         2,424
            |     '- module org.jboss.modules.Module @ 0x51276a728                                            |            1 |           56 |                88 |       208,704
            |        '- moduleClassLoader org.jboss.modules.ModuleClassLoader @ 0x575161fb0                   |            1 |           88 |                88 |     1,224,776
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      

      And UndertowContainerProvider

      Class Name                                                                  | Ref. Objects | Shallow Heap | Ref. Shallow Heap | Retained Heap
      ----------------------------------------------------------------------------------------------------------------------------------------------
      [19] class io.undertow.websockets.jsr.UndertowContainerProvider @ 0xe2c84668|            5 |           24 |               480 |     2,121,200
      '- webSocketContainers java.util.concurrent.ConcurrentHashMap @ 0xe2c85048  |            5 |           64 |               480 |     2,120,840
         '- table java.util.concurrent.ConcurrentHashMap$Node[16] @ 0xe2c85088    |            5 |           80 |               480 |     2,120,776
            |- [14] java.util.concurrent.ConcurrentHashMap$Node @ 0xe2c850d8      |            2 |           32 |               192 |       848,032
            |  |- key org.jboss.modules.ModuleClassLoader @ 0xe2ac72f0            |            1 |           96 |                96 |         3,848
            |  |- next java.util.concurrent.ConcurrentHashMap$Node @ 0xe1c45918   |            1 |           32 |                96 |       424,200
            |  |  '- key org.jboss.modules.ModuleClassLoader @ 0xe2dd4400         |            1 |           96 |                96 |         3,904
      ----------------------------------------------------------------------------------------------------------------------------------------------
      

            rhn-support-ivassile Ilia Vassilev
            rhn-support-aogburn Aaron Ogburn
            Votes:
            0 Vote for this issue
            Watchers:
            9 Start watching this issue

              Created:
              Updated:
              Resolved: