Skip to content

Instantly share code, notes, and snippets.

@samspills
Last active July 20, 2023 13:21
Show Gist options
  • Save samspills/1853f7190c01d6ed34085e4e45d1170e to your computer and use it in GitHub Desktop.
Save samspills/1853f7190c01d6ed34085e4e45d1170e to your computer and use it in GitHub Desktop.
[wip] how to trigger a CE fiber dump programatically
//> using scala "2.13.11"
//> using lib "org.typelevel::cats-effect:3.5.1"
import java.lang.management.ManagementFactory
import javax.management.ObjectName
import javax.management.Query
import scala.collection.JavaConverters.asScalaSetConverter
import javax.management.MBeanServer
import cats.effect.{IO, IOApp}
object MBean extends IOApp.Simple {
def readFibersFromRuntime: IO[String] = IO {
val mbs: MBeanServer = ManagementFactory.getPlatformMBeanServer
val beans = mbs.queryMBeans(null, null) // just get all the beans
val className = "cats.effect.unsafe.metrics.LiveFiberSnapshotTrigger"
val bean = beans.asScala
.find(_.getClassName == className)
.getOrElse(throw new Exception("Failed to find bean"))
val fiberDump = mbs
.invoke(bean.getObjectName, "liveFiberSnapshot", Array.empty, Array.empty)
.asInstanceOf[Array[String]]
.mkString
val extraWhitespace = """(\n\s*){3,}""".r
extraWhitespace.replaceAllIn(fiberDump, "\n\n")
}
val run: IO[Unit] = readFibersFromRuntime.flatMap(IO.println)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment