You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkinsfile流水线脚本中执行Java垃圾回收?

在Jenkins流水线中触发Java垃圾回收的方案

针对你提供的Jenkinsfile,要在流水线中自动执行Java垃圾回收,分两种场景给出具体实现方式,替代监控插件的手动操作:

场景1:触发Jenkins代理/主节点的JVM垃圾回收

Jenkins本身基于Java运行,可通过JDK自带工具在流水线中自动触发GC:

方法1:使用jcmd命令(推荐)

需要节点上安装完整JDK,在流水线中添加专门阶段执行GC触发脚本:

pipeline {
  agent any
  stages {
    stage('Install dependencies') {
      steps {
        sh 'yarn'
      }
    }
    stage('Trigger Jenkins JVM GC') {
      steps {
        sh '''
          # 获取Jenkins的Java进程ID
          JENKINS_PID=$(pidof java)
          if [ -n "$JENKINS_PID" ]; then
            # 触发GC
            jcmd $JENKINS_PID GC.run
            echo "已成功为Jenkins进程(PID: $JENKINS_PID)触发垃圾回收"
          else
            echo "未找到Jenkins的Java进程"
          fi
        '''
      }
    }
  }
}

方法2:使用jmap命令

jmap -histo:live命令会强制触发Full GC以统计存活对象,间接实现GC触发:

pipeline {
  agent any
  stages {
    stage('Install dependencies') {
      steps {
        sh 'yarn'
      }
    }
    stage('Trigger Jenkins JVM GC via jmap') {
      steps {
        sh '''
          JENKINS_PID=$(pidof java)
          if [ -n "$JENKINS_PID" ]; then
            jmap -histo:live $JENKINS_PID > /dev/null
            echo "已通过jmap触发Jenkins进程(PID: $JENKINS_PID)的Full GC"
          else
            echo "未找到Jenkins的Java进程"
          fi
        '''
      }
    }
  }
}

场景2:触发流水线中运行的Java应用的垃圾回收

如果是要让流水线内启动的Java应用执行GC,可通过两种方式实现:

  • 在Java应用启动时添加JVM参数:-XX:+ExplicitGCInvokesConcurrent,之后在应用代码中调用System.gc()触发;
  • 若应用暴露了JMX端口,可在流水线中使用jmxterm等工具远程触发GC。

注意事项

  • 执行GC的节点必须安装完整JDK(仅JRE无法使用jcmd/jmap工具);
  • 执行命令的用户需要拥有访问Jenkins进程的权限(建议使用Jenkins运行用户执行)。

内容的提问来源于stack exchange,提问作者EliteRaceElephant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 10:35:34