【问题标题】:JMX mbean memory retentions and garbage collectionJMX mbean 内存保留和垃圾回收
【发布时间】:2018-05-08 18:11:16
【问题描述】:

我正在研究实现 JMX 监控,我想知道 JMX MBean 服务器如何管理内存以及它何时释放其注册的 mbean。

我创建了一个简单的示例并正在使用它,并注意到对象没有被释放,并且我能够在垃圾收集器应该启动很久之后通过 JConsole 向它们发送消息。这让我相信生产中存在巨大的内存泄漏潜力,并且可能会出现难以控制的内存增长。例如,在这里我创建了 100 个 bean 并通过 JConsole 向它们发送消息:

trait OrderTrackerMBean {
  def getOrderId : Int
  def setOrderId(orderId:Int)
}

class OrderTracker extends OrderTrackerMBean {
  var orderId = 0
  override def getOrderId: Int = orderId
  override def setOrderId(_orderId: Int)= {
    println(s"setting order id ${_orderId}")
    orderId = _orderId
  }

}

object TestJMX extends App {
  val s: MBeanServer = ManagementFactory.getPlatformMBeanServer
  0 to 100 map {
    x =>
      val objectName: ObjectName = new ObjectName(s"a.b.c.$x:type=basic,name=game")
      val orderTrackerBean = new OrderTracker
      s.registerMBean(orderTrackerBean ,objectName)
  }
  while(true) {}
}

【问题讨论】:

    标签: java scala garbage-collection jmx mbeans


    【解决方案1】:

    您正在创建 100 个 Mbean 对象,并且它将在 JVM 的生命周期中处于活动状态。它仍然会被引用,因此在垃圾收集期间不会被收集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 2012-04-11
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多