Skip to content

Commit 2e7ac74

Browse files
authored
Merge pull request #900 from SimunKaracic/893-bring-back-pool-metrics
Bring back buffer pool metrics
2 parents acc3c12 + e6fc765 commit 2e7ac74

File tree

5 files changed

+56
-9
lines changed

5 files changed

+56
-9
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
steps:
1010
- uses: actions/checkout@v1
1111
- run: git fetch --depth=1 origin '+refs/tags/*:refs/tags/*'
12-
- uses: olafurpg/setup-scala@v2
12+
- uses: olafurpg/setup-scala@v10
1313
with:
1414
java-version: adopt@1.8.0-242
1515
- name: Test

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
steps:
1111
- uses: actions/checkout@v1
1212
- run: git fetch --depth=1 origin '+refs/tags/*:refs/tags/*'
13-
- uses: olafurpg/setup-scala@v2
13+
- uses: olafurpg/setup-scala@v10
1414
- name: Release
1515
run: csbt release
1616
shell: bash

instrumentation/kamon-system-metrics/src/main/scala/kamon/instrumentation/system/jvm/JvmMetrics.scala

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ package kamon.instrumentation.system.jvm
1919
import java.lang.management.ManagementFactory
2020

2121
import kamon.Kamon
22-
import kamon.instrumentation.system.jvm.JvmMetrics.MemoryUsageInstruments.MemoryRegionInstruments
22+
import kamon.instrumentation.system.jvm.JvmMetrics.MemoryUsageInstruments.{BufferPoolInstruments, MemoryRegionInstruments}
2323
import kamon.instrumentation.system.jvm.JvmMetricsCollector.{Collector, MemoryPool}
2424
import kamon.metric.{Gauge, Histogram, InstrumentGroup, MeasurementUnit}
2525
import kamon.tag.TagSet
@@ -124,6 +124,23 @@ object JvmMetrics {
124124
description = "Total number od classes currently loaded"
125125
)
126126

127+
val BufferPoolCount = Kamon.gauge(
128+
name = s"jvm.memory.buffer-pool.count",
129+
description = "Estimated number of buffers in the pool"
130+
)
131+
132+
val BufferPoolUsed = Kamon.gauge(
133+
name = s"jvm.memory.buffer-pool.used",
134+
description = "Estimate of memory used by the JVM for this buffer pool in bytes",
135+
unit = MeasurementUnit.information.bytes
136+
)
137+
138+
val BufferPoolCapacity = Kamon.gauge(
139+
name = s"jvm.memory.buffer-pool.capacity",
140+
description = "Estimate of the total capacity of this pool in bytes",
141+
unit = MeasurementUnit.information.bytes
142+
)
143+
127144
class GarbageCollectionInstruments(tags: TagSet) extends InstrumentGroup(tags) {
128145
private val _collectorCache = mutable.Map.empty[String, Histogram]
129146

@@ -144,6 +161,7 @@ object JvmMetrics {
144161
class MemoryUsageInstruments(tags: TagSet) extends InstrumentGroup(tags) {
145162
private val _memoryRegionsCache = mutable.Map.empty[String, MemoryRegionInstruments]
146163
private val _memoryPoolsCache = mutable.Map.empty[String, MemoryRegionInstruments]
164+
private val _memoryBuffersCache = mutable.Map.empty[String, BufferPoolInstruments]
147165

148166
def regionInstruments(regionName: String): MemoryRegionInstruments =
149167
_memoryRegionsCache.getOrElseUpdate(regionName, {
@@ -168,6 +186,19 @@ object JvmMetrics {
168186
register(MemoryPoolMax, region)
169187
)
170188
})
189+
190+
def bufferPoolInstruments(poolName: String): BufferPoolInstruments = {
191+
_memoryBuffersCache.getOrElseUpdate(poolName, {
192+
val bufferTags = tags
193+
.withTag("pool", poolName)
194+
195+
BufferPoolInstruments(
196+
register(BufferPoolCount, bufferTags),
197+
register(BufferPoolUsed, bufferTags),
198+
register(BufferPoolCapacity, bufferTags)
199+
)
200+
})
201+
}
171202
}
172203

173204
class ClassLoadingInstruments(tags: TagSet) extends InstrumentGroup(tags) {
@@ -183,12 +214,18 @@ object JvmMetrics {
183214
}
184215

185216
object MemoryUsageInstruments {
186-
case class MemoryRegionInstruments(
217+
case class MemoryRegionInstruments (
187218
used: Histogram,
188219
free: Histogram,
189220
committed: Gauge,
190221
max: Gauge
191222
)
223+
224+
case class BufferPoolInstruments (
225+
count: Gauge,
226+
used: Gauge,
227+
capacity: Gauge
228+
)
192229
}
193230
}
194231

instrumentation/kamon-system-metrics/src/main/scala/kamon/instrumentation/system/jvm/JvmMetricsCollector.scala

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package kamon.instrumentation.system.jvm
1818

19-
import java.lang.management.{ManagementFactory, MemoryUsage}
19+
import java.lang.management.{BufferPoolMXBean, ManagementFactory, MemoryUsage}
2020
import java.util.concurrent.TimeUnit
2121

2222
import com.sun.management.GarbageCollectionNotificationInfo
@@ -26,6 +26,7 @@ import javax.management.openmbean.CompositeData
2626
import javax.management.{Notification, NotificationEmitter, NotificationListener}
2727
import kamon.Kamon
2828
import kamon.instrumentation.system.jvm.JvmMetrics.{ClassLoadingInstruments, GarbageCollectionInstruments, MemoryUsageInstruments, ThreadsInstruments}
29+
import kamon.instrumentation.system.jvm.JvmMetricsCollector.MemoryPool.sanitize
2930
import kamon.instrumentation.system.jvm.JvmMetricsCollector.{Collector, MemoryPool}
3031
import kamon.module.{Module, ModuleFactory}
3132
import kamon.tag.TagSet
@@ -164,6 +165,15 @@ class JvmMetricsCollector(ec: ExecutionContext) extends Module {
164165
poolInstruments.max.update(memoryUsage.getMax)
165166
poolInstruments.committed.update(memoryUsage.getCommitted)
166167
})
168+
169+
ManagementFactory.getPlatformMXBeans(classOf[BufferPoolMXBean]).asScala.toList.map { bean =>
170+
val bufferPoolInstruments = memoryUsageInstruments.bufferPoolInstruments(
171+
MemoryPool.sanitize(bean.getName))
172+
173+
bufferPoolInstruments.count.update(bean.getCount)
174+
bufferPoolInstruments.used.update(bean.getMemoryUsed)
175+
bufferPoolInstruments.capacity.update(bean.getTotalCapacity)
176+
}
167177
}
168178
}
169179
}
@@ -229,9 +239,9 @@ object JvmMetricsCollector {
229239
}
230240

231241
def find(poolName: String): MemoryPool =
232-
_memoryRegionMappings.get(poolName).getOrElse {
233-
MemoryPool(poolName, sanitize(poolName), if(poolName.endsWith("Eden Space")) Usage.Eden else Usage.Unknown)
234-
}
242+
_memoryRegionMappings.getOrElse(poolName,
243+
MemoryPool(poolName,
244+
sanitize(poolName), if (poolName.endsWith("Eden Space")) Usage.Eden else Usage.Unknown))
235245

236246
private val _memoryRegionMappings: Map[String, MemoryPool] = Map (
237247
"Metaspace" -> MemoryPool("Metaspace", "metaspace", Usage.Metaspace),

project/Build.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ object BaseProject extends AutoPlugin {
3535
val hdrHistogram = "org.hdrhistogram" % "HdrHistogram" % "2.1.10"
3636
val okHttp = "com.squareup.okhttp3" % "okhttp" % "3.14.7"
3737
val okHttpMockServer = "com.squareup.okhttp3" % "mockwebserver" % "3.10.0"
38-
val oshiCore = "com.github.oshi" % "oshi-core" % "5.3.4"
38+
val oshiCore = "com.github.oshi" % "oshi-core" % "5.3.6"
3939

4040

4141
val kanelaAgentVersion = settingKey[String]("Kanela Agent version")

0 commit comments

Comments
 (0)