jvm.monitor

JVM management beans exposed as Clojure data

Read class loading, compilation, garbage collection, memory, operating-system, runtime, and thread metrics through one API.

1    Overview

The namespace wraps ManagementFactory MXBeans and registers map-like conversions so callers can work with ordinary Clojure maps rather than Java bean accessors.

2    Walkthrough

2.1    Discover metric groups

(require '[jvm.monitor :as monitor])

(monitor/jvm)

2.2    Read one group

(monitor/jvm :memory)
(monitor/jvm :gc)
(monitor/jvm :thread)
(monitor/jvm :os)

2.3    Capture a complete snapshot

Use :all for diagnostics, support bundles, or periodic telemetry. For high-frequency monitoring, request only the groups required by the caller.

(def snapshot (monitor/jvm :all))
(keys snapshot)
(get-in snapshot [:memory :heap-memory-usage :used])

3    Direct bean access

The individual *-bean functions return the underlying MXBean values when Java interop or another object conversion is required.

4    API



class-loading-bean ^

[]
Added 3.0

gives information about class loading

v 3.0
(defn class-loading-bean
  []
  (ManagementFactory/getClassLoadingMXBean))
link
(object/to-map (class-loading-bean)) => (contains {:loaded-class-count number? :total-loaded-class-count number? :unloaded-class-count number?})

compilation-bean ^

[]
Added 3.0

gives information about compilation

v 3.0
(defn compilation-bean
  []
  (ManagementFactory/getCompilationMXBean))
link
(object/to-map (compilation-bean)) => (contains {:name string? :total-compilation-time number?})

gc-bean ^

[]
Added 3.0

gives information about the garbage collector

v 3.0
(defn gc-bean
  []
  (ManagementFactory/getGarbageCollectorMXBeans))
link
(object/to-map (first (gc-bean))) => (contains {:collection-count number? :collection-time number?})

jvm ^

[] [k]
Added 3.0

access to all `java.lang.management.ManagementFactory` MXBean methods

v 3.0
(defn jvm
  ([]
   (sort (keys jvm-map)))
  ([k]
   (cond (= k :all)
         (->> jvm-map
              (collection/map-vals (fn [f]
                            (object/to-data (f)))))

         (jvm-map k)
         (object/to-data ((jvm-map k)))

         :else
         (jvm))))
link
(jvm) => [:class-loading :compilation :gc :memory :memory-manager :memory-pool :os :runtime :thread] (jvm :gc) ;; => [{:collection-count 33, :collection-time 1089} ;; {:collection-count 4, :collection-time 585}] (jvm :all) ;; =>

jvm-map ^

NONE
(def jvm-map)
link

memory-bean ^

[]
Added 3.0

gives information about the system memory

v 3.0
(defn memory-bean
  []
  (ManagementFactory/getMemoryMXBean))
link
(object/to-map (memory-bean)) => (contains-in {:heap-memory-usage {:committed number? :init number? :max number? :used number?} :non-heap-memory-usage {:committed number? :init number? :max number? :used number?} :object-pending-finalization-count number?})

memory-manager-bean ^

[]
Added 3.0

gives information about the memory manager

v 3.0
(defn memory-manager-bean
  []
  (ManagementFactory/getMemoryManagerMXBeans))
link
(object/to-data (memory-manager-bean)) => (any (contains-in [{:memory-pool-names [string?], :name string?}]) map?)

memory-pool-bean ^

[]
Added 3.0

gives information about the memory pool

v 3.0
(defn memory-pool-bean
  []
  (ManagementFactory/getMemoryPoolMXBeans))
link
(object/to-map (first (memory-pool-bean))) => (contains {:name string? :type string? :usage map?})

os-bean ^

[]
Added 3.0

gives information about the operating system

v 3.0
(defn os-bean
  []
  (ManagementFactory/getOperatingSystemMXBean))
link
(object/to-map (os-bean)) => (contains {:arch string? :available-processors number? :name string? :system-load-average number? :version string?})

runtime-bean ^

[]
Added 3.0

gives information about the system runtime

v 3.0
(defn runtime-bean
  []
  (ManagementFactory/getRuntimeMXBean))
link
(object/to-map (runtime-bean)) => (contains {:name string? :vm-name string? :spec-version string?})

thread-bean ^

[]
Added 3.0

gives information about the current thread executor

v 3.0
(defn thread-bean
  []
  (ManagementFactory/getThreadMXBean))
link
(object/to-map (thread-bean)) => (contains {:thread-count number? :peak-thread-count number? :daemon-thread-count number?})