Skip to content

Commit

Permalink
[KYUUBI apache#4352] Support System.gc() with periodic GC interval
Browse files Browse the repository at this point in the history
  • Loading branch information
lightning-L committed Feb 20, 2023
1 parent 0dce65d commit 75cdfbb
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2639,4 +2639,11 @@ object KyuubiConf {
.version("1.7.0")
.timeConf
.createWithDefault(Duration.ofSeconds(60).toMillis)

val PERIODIC_GC_INTERVAL: ConfigEntry[Long] = buildConf("kyuubi.periodicGC.interval")
.doc("How often to trigger a garbage collection.")
.version("1.7.0")
.serverOnly
.timeConf
.createWithDefaultString("PT30M")
}
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,9 @@ class KyuubiServer(name: String) extends Serverable(name) {
val kinit = new KinitAuxiliaryService()
addService(kinit)

val periodicGCService = new PeriodicGCService
addService(periodicGCService)

if (conf.get(MetricsConf.METRICS_ENABLED)) {
addService(new MetricsSystem)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.kyuubi.server

import java.util.concurrent.TimeUnit

import org.apache.kyuubi.config.KyuubiConf
import org.apache.kyuubi.service.AbstractService
import org.apache.kyuubi.util.ThreadUtils

class PeriodicGCService(name: String) extends AbstractService(name) {
def this() = this(classOf[PeriodicGCService].getSimpleName)

private val gcTrigger = ThreadUtils.newDaemonSingleThreadScheduledExecutor("periodic-gc-trigger")

override def start(): Unit = {
startGcTrigger()
super.start()
}

override def stop(): Unit = {
super.stop()
ThreadUtils.shutdown(gcTrigger)
}

private def startGcTrigger(): Unit = {
val interval = conf.get(KyuubiConf.PERIODIC_GC_INTERVAL)
gcTrigger.scheduleWithFixedDelay(() => System.gc(), interval, interval, TimeUnit.MILLISECONDS)
}
}

0 comments on commit 75cdfbb

Please sign in to comment.