• Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Critical Critical
    • core

      We have recently experienced OutOfMemory errors on some large Jenkins instances that predominantly have frequently executed jobs that contain either System Groovy scripts or Build Flow project types. In one case after disabling a groovy script that was being executed via the Global Post Script Plugin after every build, the PermGen profile improved dramatically.

      We tested further with GroovyShell to run a groovy script, not depending on Jenkins.
      Java7: java.lang.OutOfMemoryError: PermGen space
      Java8: java.lang.OutOfMemoryError: Java heap space

      The tests use 2.4.6 version of groovy which is the latest version. However, the issue is still there.
      <dependency>
      <groupId>org.codehaus.groovy</groupId>
      <artifactId>groovy-all</artifactId>
      <version>2.4.6</version>
      </dependency>

      ---------------------------------------
      Configure 10 jobs which build per minute
      Each build triggers a groovy script by Global Post Script Plugin.

      class Main {
          static void main(String... args) {
              println 'Groovy world!'
              def p = new Person()
              p.write()
          }
      }
      
      class Person {
          def write(){
              println 'i am writing ...!'
          }
      }
      

      After sometime, the perm gen is eaten up. See the screenshot of jvisualvm.

      I checked the source code of the plugin:
      https://github.com/jenkinsci/global-post-script-plugin/blob/master/src/main/java/com/orctom/jenkins/plugin/globalpostscript/ScriptExecutor.java

      My feeling is that it is probably caused by GroovyShell. Jenkins loads and runs groovy extensively and maybe there are places in core or other plugins having similar logic, I wonder
      1. if this is a potential memory leak, and
      2. if anyone has met similar issue.

        1. after.png
          after.png
          43 kB
        2. before.png
          before.png
          70 kB
        3. Screenshot from 2016-04-01 11.04.43.png
          Screenshot from 2016-04-01 11.04.43.png
          182 kB
        4. permgenIssue.jpg
          permgenIssue.jpg
          35 kB
        5. Screenshot from 2016-03-07 09.43.29.png
          Screenshot from 2016-03-07 09.43.29.png
          113 kB

          [JENKINS-33358] Groovy and PermGen memory leak

          Hongkai Liu created issue -
          Hongkai Liu made changes -
          Description Original: Configure 10 jobs which build per minute
          Each build triggers a groovy script by Global Post Script Plugin.

          {noformat}
          class Main {
              static void main(String... args) {
                  println 'Groovy world!'
                  def p = new Person()
                  p.write()
              }
          }

          class Person {
              def write(){
                  println 'i am writing ...!'
              }
          }
          {noformat}

          After sometime, the perm gen is eaten up. See the screenshot of jvisualvm.

          I checked the source code of the plugin:
          https://github.com/jenkinsci/global-post-script-plugin/blob/master/src/main/java/com/orctom/jenkins/plugin/globalpostscript/ScriptExecutor.java

          My feeling is that it is probably caused by GroovyShell. Jenkins loads and runs groovy extensively and maybe there are places in core or other plugins having similar logic, I wonder
          1. if this is a potential memory leak, and
          2. if anyone has met similar issue.





          New: Configure 10 jobs which build per minute
          Each build triggers a groovy script by Global Post Script Plugin.

          {noformat}
          class Main {
              static void main(String... args) {
                  println 'Groovy world!'
                  def p = new Person()
                  p.write()
              }
          }

          class Person {
              def write(){
                  println 'i am writing ...!'
              }
          }
          {noformat}

          After sometime, the perm gen is eaten up. See the screenshot of jvisualvm.
          !Screenshot from 2016-03-07 09.43.29.png|thumbnail!

          I checked the source code of the plugin:
          https://github.com/jenkinsci/global-post-script-plugin/blob/master/src/main/java/com/orctom/jenkins/plugin/globalpostscript/ScriptExecutor.java

          My feeling is that it is probably caused by GroovyShell. Jenkins loads and runs groovy extensively and maybe there are places in core or other plugins having similar logic, I wonder
          1. if this is a potential memory leak, and
          2. if anyone has met similar issue.





          Hongkai Liu made changes -
          Issue Type Original: Bug [ 1 ] New: Story [ 10002 ]
          Hongkai Liu made changes -
          Labels New: groovy memory-leak
          Hongkai Liu made changes -
          Description Original: Configure 10 jobs which build per minute
          Each build triggers a groovy script by Global Post Script Plugin.

          {noformat}
          class Main {
              static void main(String... args) {
                  println 'Groovy world!'
                  def p = new Person()
                  p.write()
              }
          }

          class Person {
              def write(){
                  println 'i am writing ...!'
              }
          }
          {noformat}

          After sometime, the perm gen is eaten up. See the screenshot of jvisualvm.
          !Screenshot from 2016-03-07 09.43.29.png|thumbnail!

          I checked the source code of the plugin:
          https://github.com/jenkinsci/global-post-script-plugin/blob/master/src/main/java/com/orctom/jenkins/plugin/globalpostscript/ScriptExecutor.java

          My feeling is that it is probably caused by GroovyShell. Jenkins loads and runs groovy extensively and maybe there are places in core or other plugins having similar logic, I wonder
          1. if this is a potential memory leak, and
          2. if anyone has met similar issue.





          New: We got the problem from the operation team who observe that the perm gen size has been increased by monitoring plugin.
          This is quite important for us because more and more groovy based steps are integrated into our CI procedure.
          After analysis, we simplify the testing environment with 10 jobs and Global Post Script Plugin.

          We test further with GroovyShell to run a groovy script, not depending on Jenkins.
          Java7: java.lang.OutOfMemoryError: PermGen space
          Java8: java.lang.OutOfMemoryError: Java heap space

          ---------------------------------------
          Configure 10 jobs which build per minute
          Each build triggers a groovy script by Global Post Script Plugin.

          {noformat}
          class Main {
              static void main(String... args) {
                  println 'Groovy world!'
                  def p = new Person()
                  p.write()
              }
          }

          class Person {
              def write(){
                  println 'i am writing ...!'
              }
          }
          {noformat}

          After sometime, the perm gen is eaten up. See the screenshot of jvisualvm.
          !Screenshot from 2016-03-07 09.43.29.png|thumbnail!

          I checked the source code of the plugin:
          https://github.com/jenkinsci/global-post-script-plugin/blob/master/src/main/java/com/orctom/jenkins/plugin/globalpostscript/ScriptExecutor.java

          My feeling is that it is probably caused by GroovyShell. Jenkins loads and runs groovy extensively and maybe there are places in core or other plugins having similar logic, I wonder
          1. if this is a potential memory leak, and
          2. if anyone has met similar issue.





          Hongkai Liu made changes -
          Description Original: We got the problem from the operation team who observe that the perm gen size has been increased by monitoring plugin.
          This is quite important for us because more and more groovy based steps are integrated into our CI procedure.
          After analysis, we simplify the testing environment with 10 jobs and Global Post Script Plugin.

          We test further with GroovyShell to run a groovy script, not depending on Jenkins.
          Java7: java.lang.OutOfMemoryError: PermGen space
          Java8: java.lang.OutOfMemoryError: Java heap space

          ---------------------------------------
          Configure 10 jobs which build per minute
          Each build triggers a groovy script by Global Post Script Plugin.

          {noformat}
          class Main {
              static void main(String... args) {
                  println 'Groovy world!'
                  def p = new Person()
                  p.write()
              }
          }

          class Person {
              def write(){
                  println 'i am writing ...!'
              }
          }
          {noformat}

          After sometime, the perm gen is eaten up. See the screenshot of jvisualvm.
          !Screenshot from 2016-03-07 09.43.29.png|thumbnail!

          I checked the source code of the plugin:
          https://github.com/jenkinsci/global-post-script-plugin/blob/master/src/main/java/com/orctom/jenkins/plugin/globalpostscript/ScriptExecutor.java

          My feeling is that it is probably caused by GroovyShell. Jenkins loads and runs groovy extensively and maybe there are places in core or other plugins having similar logic, I wonder
          1. if this is a potential memory leak, and
          2. if anyone has met similar issue.





          New: We got the problem from the operation team who observe that the perm gen size has been increased by monitoring plugin.
          This is quite important for us because more and more groovy based steps are integrated into our CI procedure.
          After analysis, we simplify the testing environment with 10 jobs and Global Post Script Plugin.

          We test further with GroovyShell to run a groovy script, not depending on Jenkins.
          Java7: java.lang.OutOfMemoryError: PermGen space
          Java8: java.lang.OutOfMemoryError: Java heap space

          The tests use 2.4.6 version of groovy which is the latest version. However, the issue is still there.
          <dependency>
                      <groupId>org.codehaus.groovy</groupId>
                      <artifactId>groovy-all</artifactId>
                      <version>2.4.6</version>
          </dependency>

          ---------------------------------------
          Configure 10 jobs which build per minute
          Each build triggers a groovy script by Global Post Script Plugin.

          {noformat}
          class Main {
              static void main(String... args) {
                  println 'Groovy world!'
                  def p = new Person()
                  p.write()
              }
          }

          class Person {
              def write(){
                  println 'i am writing ...!'
              }
          }
          {noformat}

          After sometime, the perm gen is eaten up. See the screenshot of jvisualvm.
          !Screenshot from 2016-03-07 09.43.29.png|thumbnail!

          I checked the source code of the plugin:
          https://github.com/jenkinsci/global-post-script-plugin/blob/master/src/main/java/com/orctom/jenkins/plugin/globalpostscript/ScriptExecutor.java

          My feeling is that it is probably caused by GroovyShell. Jenkins loads and runs groovy extensively and maybe there are places in core or other plugins having similar logic, I wonder
          1. if this is a potential memory leak, and
          2. if anyone has met similar issue.





          Hongkai Liu made changes -
          Priority Original: Major [ 3 ] New: Critical [ 2 ]
          Christian Lague made changes -
          Issue Type Original: Story [ 10002 ] New: Bug [ 1 ]
          Christian Lague made changes -
          Component/s New: core [ 15593 ]
          Component/s Original: global-post-script-plugin [ 20637 ]
          Christian Lague made changes -
          Assignee Original: Hao CHEN [ orctom ] New: Jesse Glick [ jglick ]
          Christian Lague made changes -
          Description Original: We got the problem from the operation team who observe that the perm gen size has been increased by monitoring plugin.
          This is quite important for us because more and more groovy based steps are integrated into our CI procedure.
          After analysis, we simplify the testing environment with 10 jobs and Global Post Script Plugin.

          We test further with GroovyShell to run a groovy script, not depending on Jenkins.
          Java7: java.lang.OutOfMemoryError: PermGen space
          Java8: java.lang.OutOfMemoryError: Java heap space

          The tests use 2.4.6 version of groovy which is the latest version. However, the issue is still there.
          <dependency>
                      <groupId>org.codehaus.groovy</groupId>
                      <artifactId>groovy-all</artifactId>
                      <version>2.4.6</version>
          </dependency>

          ---------------------------------------
          Configure 10 jobs which build per minute
          Each build triggers a groovy script by Global Post Script Plugin.

          {noformat}
          class Main {
              static void main(String... args) {
                  println 'Groovy world!'
                  def p = new Person()
                  p.write()
              }
          }

          class Person {
              def write(){
                  println 'i am writing ...!'
              }
          }
          {noformat}

          After sometime, the perm gen is eaten up. See the screenshot of jvisualvm.
          !Screenshot from 2016-03-07 09.43.29.png|thumbnail!

          I checked the source code of the plugin:
          https://github.com/jenkinsci/global-post-script-plugin/blob/master/src/main/java/com/orctom/jenkins/plugin/globalpostscript/ScriptExecutor.java

          My feeling is that it is probably caused by GroovyShell. Jenkins loads and runs groovy extensively and maybe there are places in core or other plugins having similar logic, I wonder
          1. if this is a potential memory leak, and
          2. if anyone has met similar issue.





          New: We have recently experienced OutOfMemory errors on some large Jenkins instances that predominantly have frequently executed jobs that contain either System Groovy scripts or Build Flow project types. In one case after disabling a groovy script that was being executed via the Global Post Script Plugin after every build, the PermGen profile improved as shown:


          We test further with GroovyShell to run a groovy script, not depending on Jenkins.
          Java7: java.lang.OutOfMemoryError: PermGen space
          Java8: java.lang.OutOfMemoryError: Java heap space

          The tests use 2.4.6 version of groovy which is the latest version. However, the issue is still there.
          <dependency>
                      <groupId>org.codehaus.groovy</groupId>
                      <artifactId>groovy-all</artifactId>
                      <version>2.4.6</version>
          </dependency>

          ---------------------------------------
          Configure 10 jobs which build per minute
          Each build triggers a groovy script by Global Post Script Plugin.

          {noformat}
          class Main {
              static void main(String... args) {
                  println 'Groovy world!'
                  def p = new Person()
                  p.write()
              }
          }

          class Person {
              def write(){
                  println 'i am writing ...!'
              }
          }
          {noformat}

          After sometime, the perm gen is eaten up. See the screenshot of jvisualvm.
          !Screenshot from 2016-03-07 09.43.29.png|thumbnail!

          I checked the source code of the plugin:
          https://github.com/jenkinsci/global-post-script-plugin/blob/master/src/main/java/com/orctom/jenkins/plugin/globalpostscript/ScriptExecutor.java

          My feeling is that it is probably caused by GroovyShell. Jenkins loads and runs groovy extensively and maybe there are places in core or other plugins having similar logic, I wonder
          1. if this is a potential memory leak, and
          2. if anyone has met similar issue.





            ympaul2 paul young
            hongkailiu Hongkai Liu
            Votes:
            23 Vote for this issue
            Watchers:
            53 Start watching this issue

              Created:
              Updated:
              Resolved: