Сохранение памяти JMX Mbean и сборка мусора - PullRequest
0 голосов
/ 08 мая 2018

Я исследую реализацию мониторинга JMX и хотел узнать, как сервер JMX MBean управляет памятью и когда он освобождает свои зарегистрированные mbeans.

Я создал тривиальный пример, поэкспериментировал с ним и заметил, что объекты не были освобождены, и я смог отправить их через JConsole спустя долгое время после включения сборщика мусора. Это наводит меня на мысль, что Существует огромный потенциал для утечек памяти при производстве, и может быть чрезмерно большой рост памяти. Например, здесь я создал 100 бинов и отправил их через 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) {}
}

enter image description here

1 Ответ

0 голосов
/ 08 мая 2018

Вы создаете 100 объектов Mbean, и они будут жить в течение жизненного цикла JVM. На него все еще будут ссылаться, и, следовательно, он не будет собираться во время сборки мусора.

...