Package org.log4mongo.contrib

Source Code of org.log4mongo.contrib.JvmMonitor

package org.log4mongo.contrib;

import com.sun.management.OperatingSystemMXBean;
import org.apache.log4j.Logger;
import sun.management.ManagementFactory;

import java.lang.management.RuntimeMXBean;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
* author: Hill.Hu
*/
public class JvmMonitor {
  private static JvmMonitor uniqueInstance = null;
    private static Logger logger = Logger.getLogger(JvmMonitor.class);
    private long lastProcessCpuTime = 0;
    private long lastUptime = 0;
    public static final int DEFAULT_REFRESH_SECONDS = 60;

    public synchronized static  JvmMonitor getInstance(int periodSeconds){
      if(uniqueInstance==null)
        uniqueInstance=new JvmMonitor(periodSeconds);
      return uniqueInstance;
    }
   
    public synchronized static  JvmMonitor getInstance(){
      if(uniqueInstance==null)
        uniqueInstance=new JvmMonitor();
      return uniqueInstance;
    }
   
    private JvmMonitor() {
        this(DEFAULT_REFRESH_SECONDS);
    }

    private JvmMonitor(int periodSeconds) {

        logger.info("jvm monitor start  ...");
        ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
        executorService.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                record();
            }
        }, periodSeconds, periodSeconds, TimeUnit.SECONDS);
    }

    public void record() {
        String message = "memoryUsed=" + getMemoryUsed() + "k "
                + " cpuUsed=" + getCpu() + " threadCount=" + getThreadCount();
        logger.info(message);


    }

    protected int getThreadCount() {
        return ManagementFactory.getThreadMXBean().getThreadCount();
    }

    protected long getMemoryUsed() {
        return (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (1024);
    }

    protected double getCpu() {
        OperatingSystemMXBean osbean = (OperatingSystemMXBean) ManagementFactory
                .getOperatingSystemMXBean();
        RuntimeMXBean runbean = java.lang.management.ManagementFactory
                .getRuntimeMXBean();
        long uptime = runbean.getUptime();
        long processCpuTime = osbean.getProcessCpuTime();
        //cpu count
        int processors = osbean.getAvailableProcessors();
        //uptime in milliseconds ,and    processCpuTime in nao seconds
        double cpu = (processCpuTime - lastProcessCpuTime) / ((uptime - lastUptime) * 10000f * processors);
        lastProcessCpuTime = processCpuTime;
        lastUptime = uptime;
        return (int) cpu;  //
    }

}
TOP

Related Classes of org.log4mongo.contrib.JvmMonitor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.