/* * Copyright 2014-2015 JKOOL, LLC. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.jkoolcloud.tnt4j.dump; import java.lang.management.ClassLoadingMXBean; import java.lang.management.CompilationMXBean; import java.lang.management.GarbageCollectorMXBean; import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; import java.lang.management.MemoryPoolMXBean; import java.lang.management.OperatingSystemMXBean; import java.lang.management.ThreadMXBean; import java.util.List; /** * <p> * This class is a dump provider for dumping java statistics based on ManagementFactory and includes: * OperatingSystemMXBean, MemoryMXBean, MemoryPoolMXBean, GarbageCollectorMXBean, ClassLoadingMXBean, ThreadMXBean, * CompilationMXBean * * </p> * * @see DumpCollection * * @version $Revision: 2 $ * */ public class MXBeanDumpProvider extends DefaultDumpProvider { /** * Create a new java statistics dump provider with a given name. * *@param name * provider name */ public MXBeanDumpProvider(String name) { super(name, "System"); } @Override public DumpCollection getDump() { Dump dump = new Dump("JavaMXStats", this); OperatingSystemMXBean oxBean = ManagementFactory.getOperatingSystemMXBean(); dump.add("os.xbean.name", oxBean.getName()); dump.add("os.xbean.version", oxBean.getVersion()); dump.add("os.xbean.arch", oxBean.getArch()); dump.add("os.xbean.cpus", oxBean.getAvailableProcessors()); dump.add("memory.free.bytes", Runtime.getRuntime().freeMemory()); dump.add("memory.total.bytes", Runtime.getRuntime().totalMemory()); dump.add("memory.max.bytes", Runtime.getRuntime().maxMemory()); MemoryMXBean mxBean = ManagementFactory.getMemoryMXBean(); dump.add("memory.xbean.heap.usage", mxBean.getHeapMemoryUsage()); dump.add("memory.xbean.nonheap.usage", mxBean.getNonHeapMemoryUsage()); dump.add("memory.xbean.pending.finalize.count", mxBean.getObjectPendingFinalizationCount()); CompilationMXBean cpBean = ManagementFactory.getCompilationMXBean(); dump.add(cpBean.getName() + ".xbean.total.compile.time", cpBean.getTotalCompilationTime()); List<MemoryPoolMXBean> mxPool = ManagementFactory.getMemoryPoolMXBeans(); for (MemoryPoolMXBean mpool : mxPool) { dump.add(mpool.getName() + ".xbean.type", mpool.getType()); dump.add(mpool.getName() + ".xbean.usage", mpool.getUsage()); dump.add(mpool.getName() + ".xbean.peak.usage", mpool.getPeakUsage()); dump.add(mpool.getName() + ".xbean.collection.usage", mpool.getCollectionUsage()); } List<GarbageCollectorMXBean> mf = ManagementFactory.getGarbageCollectorMXBeans(); for (GarbageCollectorMXBean gcbean : mf) { dump.add(gcbean.getName() + ".xbean.valid", gcbean.isValid()); dump.add(gcbean.getName() + ".xbean.collection.count", gcbean.getCollectionCount()); dump.add(gcbean.getName() + ".xbean.collection.time", gcbean.getCollectionTime()); } ClassLoadingMXBean cxBean = ManagementFactory.getClassLoadingMXBean(); dump.add("classloader.xbean.loaded.count", cxBean.getLoadedClassCount()); dump.add("classloader.xbean.total.loaded.count", cxBean.getTotalLoadedClassCount()); dump.add("classloader.xbean.total.unloaded.count", cxBean.getUnloadedClassCount()); ThreadMXBean txBean = ManagementFactory.getThreadMXBean(); dump.add("thread.xbean.count", txBean.getThreadCount()); dump.add("thread.xbean.daemon.count", txBean.getDaemonThreadCount()); dump.add("thread.xbean.peak.count", txBean.getPeakThreadCount()); dump.add("thread.xbean.started.count", txBean.getTotalStartedThreadCount()); return dump; } }