Uploaded image for project: 'Drools'
  1. Drools
  2. DROOLS-521

ClassLoader leak in 6.0.1 Final when building incrementally

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 6.1.0.Final
    • 6.0.1.Final
    • None
    • None

    Description

      I am currently converting a Drools 5.5.0 installation to 6.0.1 Final,
      due to many memory leaks in 5.5.0. Our use case involves a
      knowledgebase of several thousand rules which are updated at run-time
      quite frequently. As a result, we have found it necessary to do
      incremental builds of rules. I based the code for this on the
      integration tests:
      https://github.com/droolsjbpm/drools/blob/master/drools-compiler/src/test/java/org/drools/compiler/integrationtests/IncrementalCompilationTest.java

      This is working fairly well so far, but while testing, I noticed a
      fairly severe increase in PermGen heap usage every time I modify my
      rules.
      Using jhat and the Eclipse memory analyzer, I was able to track down
      the source of the problem to a classloader leak in the JavaDialect
      class. Whenever a rule is added to the JavaDialect, a RuleErrorHandler
      is added to an internal Map named errorHandlers. Unfortunately, this
      RuleErrorHandler is never removed, and it contains a reference to a
      stale PackageClassLoader. I have successfully fixed this by adding a call to this.errorHandlers.clear(); at the end of JavaDialect.compileAll().
      As far as I have been able to determine, the errorHandlers map is no longer necessary at this point, and any further calls to compileAll should be preceded by updated addRule calls

      Attachments

        Activity

          People

            mfusco@redhat.com Mario Fusco
            acwest_jira Craig West (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: