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
- compilation-bean
- gc-bean
- jvm
- jvm-map
- memory-bean
- memory-manager-bean
- memory-pool-bean
- os-bean
- runtime-bean
- thread-bean
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?})
v 3.0
(defn compilation-bean
[]
(ManagementFactory/getCompilationMXBean))
link
(object/to-map (compilation-bean)) => (contains {:name string? :total-compilation-time number?})
v 3.0
(defn gc-bean
[]
(ManagementFactory/getGarbageCollectorMXBeans))
link
(object/to-map (first (gc-bean))) => (contains {:collection-count number? :collection-time number?})
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) ;; =>
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?})
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?)
v 3.0
(defn memory-pool-bean
[]
(ManagementFactory/getMemoryPoolMXBeans))
link
(object/to-map (first (memory-pool-bean))) => (contains {:name string? :type string? :usage map?})
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?})