@Provides @ManageLifecycle public JvmMonitor getJvmMonitor( DataSourceTaskIdHolder dataSourceTaskIdHolder ) { Map<String, String[]> dimensions = MonitorsConfig.mapOfDatasourceAndTaskID( dataSourceTaskIdHolder.getDataSource(), dataSourceTaskIdHolder.getTaskId() ); return new JvmMonitor(dimensions); }
private void emitThreadAllocationMetrics(ServiceEmitter emitter) { final ServiceMetricEvent.Builder builder = builder(); MonitorUtils.addDimensionsToBuilder(builder, dimensions); if (collector != null) { long delta = collector.calculateDelta(); emitter.emit(builder.build("jvm/heapAlloc/bytes", delta)); } }
@Override public boolean doMonitor(ServiceEmitter emitter) { emitJvmMemMetrics(emitter); emitDirectMemMetrics(emitter); emitGcMetrics(emitter); emitThreadAllocationMetrics(emitter); return true; }
@Override public boolean doMonitor(ServiceEmitter emitter) { emitJvmMemMetrics(emitter); emitDirectMemMetrics(emitter); emitGcMetrics(emitter); return true; }
@Test(timeout = 60_000L) public void testGcCounts() throws InterruptedException { GcTrackingEmitter emitter = new GcTrackingEmitter(); final ServiceEmitter serviceEmitter = new ServiceEmitter("test", "localhost", emitter); serviceEmitter.start(); final JvmMonitor jvmMonitor = new JvmMonitor(); while (true) { // generate some garbage to see gc counters incremented @SuppressWarnings("unused") byte[] b = new byte[1024 * 1024 * 50]; emitter.reset(); jvmMonitor.doMonitor(serviceEmitter); if (emitter.gcSeen()) { return; } Thread.sleep(10); } }
/** * Creates a JVM monitor, configured with the given dimensions, that gathers all currently available JVM-wide * monitors: {@link JvmMonitor}, {@link JvmCpuMonitor} and {@link JvmThreadsMonitor} (this list may * change in any future release of this library, including a minor release). * * @param dimensions common dimensions to configure the JVM monitor with * @param feed feed for all emitted events * * @return a universally useful JVM-wide monitor */ public static Monitor createCompoundJvmMonitor(Map<String, String[]> dimensions, String feed) { // This list doesn't include SysMonitor because it should probably be run only in one JVM, if several JVMs are // running on the same instance, so most of the time SysMonitor should be configured/set up differently than // "simple" JVM monitors, created below. return and(// Could equally be or(), because all member monitors always return true from their monitor() methods. new JvmMonitor(dimensions, feed), new JvmCpuMonitor(dimensions, feed), new JvmThreadsMonitor(dimensions, feed) ); }
final String kind = entry.getKey(); final MemoryUsage usage = entry.getValue(); final ServiceMetricEvent.Builder builder = builder().setDimension("memKind", kind); MonitorUtils.addDimensionsToBuilder(builder, dimensions); final String kind = pool.getType() == MemoryType.HEAP ? "heap" : "nonheap"; final MemoryUsage usage = pool.getUsage(); final ServiceMetricEvent.Builder builder = builder() .setDimension("poolKind", kind) .setDimension("poolName", pool.getName());
@Provides @ManageLifecycle public JvmMonitor getJvmMonitor( DataSourceTaskIdHolder dataSourceTaskIdHolder ) { Map<String, String[]> dimensions = MonitorsConfig.mapOfDatasourceAndTaskID( dataSourceTaskIdHolder.getDataSource(), dataSourceTaskIdHolder.getTaskId() ); return new JvmMonitor(dimensions); }
void emit(ServiceEmitter emitter, Map<String, String[]> dimensions) { final ServiceMetricEvent.Builder builder = builder(); MonitorUtils.addDimensionsToBuilder(builder, dimensions); long newInvocations = invocationsCounter.getLong(); emitter.emit(builder.build("jvm/gc/count", newInvocations - lastInvocations)); lastInvocations = newInvocations; long newCpuNanos = cpuCounter.getNanos(); emitter.emit(builder.build("jvm/gc/cpu", newCpuNanos - lastCpuNanos)); lastCpuNanos = newCpuNanos; }
/** * Creates a JVM monitor, configured with the given dimensions, that gathers all currently available JVM-wide * monitors: {@link JvmMonitor}, {@link JvmCpuMonitor} and {@link JvmThreadsMonitor} (this list may * change in any future release of this library, including a minor release). * * @param dimensions common dimensions to configure the JVM monitor with * @param feed feed for all emitted events * * @return a universally useful JVM-wide monitor */ public static Monitor createCompoundJvmMonitor(Map<String, String[]> dimensions, String feed) { // This list doesn't include SysMonitor because it should probably be run only in one JVM, if several JVMs are // running on the same instance, so most of the time SysMonitor should be configured/set up differently than // "simple" JVM monitors, created below. return and(// Could equally be or(), because all member monitors always return true from their monitor() methods. new JvmMonitor(dimensions, feed), new JvmCpuMonitor(dimensions, feed), new JvmThreadsMonitor(dimensions, feed) ); }
private void emitDirectMemMetrics(ServiceEmitter emitter) { for (BufferPoolMXBean pool : ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class)) { final ServiceMetricEvent.Builder builder = builder().setDimension("bufferpoolName", pool.getName()); MonitorUtils.addDimensionsToBuilder(builder, dimensions); emitter.emit(builder.build("jvm/bufferpool/capacity", pool.getTotalCapacity())); emitter.emit(builder.build("jvm/bufferpool/used", pool.getMemoryUsed())); emitter.emit(builder.build("jvm/bufferpool/count", pool.getCount())); } }
void emit(ServiceEmitter emitter, Map<String, String[]> dimensions) { final ServiceMetricEvent.Builder builder = builder(); MonitorUtils.addDimensionsToBuilder(builder, dimensions); builder.setDimension("gcGenSpaceName", name); emitter.emit(builder.build("jvm/gc/mem/max", maxCounter.getLong())); emitter.emit(builder.build("jvm/gc/mem/capacity", capacityCounter.getLong())); emitter.emit(builder.build("jvm/gc/mem/used", usedCounter.getLong())); emitter.emit(builder.build("jvm/gc/mem/init", initCounter.getLong())); } }
final String kind = entry.getKey(); final MemoryUsage usage = entry.getValue(); final ServiceMetricEvent.Builder builder = builder().setDimension("memKind", kind); MonitorUtils.addDimensionsToBuilder(builder, dimensions); final String kind = pool.getType() == MemoryType.HEAP ? "heap" : "nonheap"; final MemoryUsage usage = pool.getUsage(); final ServiceMetricEvent.Builder builder = builder() .setDimension("poolKind", kind) .setDimension("poolName", pool.getName());
void emit(ServiceEmitter emitter, Map<String, String[]> dimensions) { final ServiceMetricEvent.Builder builder = builder(); MonitorUtils.addDimensionsToBuilder(builder, dimensions); long newInvocations = invocationsCounter.getLong(); emitter.emit(builder.build("jvm/gc/count", newInvocations - lastInvocations)); lastInvocations = newInvocations; long newCpuNanos = cpuCounter.getNanos(); emitter.emit(builder.build("jvm/gc/cpu", newCpuNanos - lastCpuNanos)); lastCpuNanos = newCpuNanos; }
private void emitDirectMemMetrics(ServiceEmitter emitter) { for (BufferPoolMXBean pool : ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class)) { final ServiceMetricEvent.Builder builder = builder().setDimension("bufferpoolName", pool.getName()); MonitorUtils.addDimensionsToBuilder(builder, dimensions); emitter.emit(builder.build("jvm/bufferpool/capacity", pool.getTotalCapacity())); emitter.emit(builder.build("jvm/bufferpool/used", pool.getMemoryUsed())); emitter.emit(builder.build("jvm/bufferpool/count", pool.getCount())); } }
void emit(ServiceEmitter emitter, Map<String, String[]> dimensions) { final ServiceMetricEvent.Builder builder = builder(); MonitorUtils.addDimensionsToBuilder(builder, dimensions); builder.setDimension("gcGenSpaceName", name); emitter.emit(builder.build("jvm/gc/mem/max", maxCounter.getLong())); emitter.emit(builder.build("jvm/gc/mem/capacity", capacityCounter.getLong())); emitter.emit(builder.build("jvm/gc/mem/used", usedCounter.getLong())); emitter.emit(builder.build("jvm/gc/mem/init", initCounter.getLong())); } }