oshi方法获取cpu、内存和系统当前时间瞬时信息

oshi方法获取cpu、内存和系统当前时间瞬时信息!

pom.xml

 <!-- oshi方法获取cpu -->
       <dependency>
            <groupId>com.github.oshi</groupId>
            <artifactId>oshi-core</artifactId>
            <version>3.5.0</version>
       </dependency>


核心代码:

package com.sunwave.domain;

import java.text.DecimalFormat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import lombok.extern.slf4j.Slf4j;
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.GlobalMemory;


@SuppressWarnings("restriction")
@Slf4j
public class test {
	//日志打印	
	private final static Logger logger = LoggerFactory.getLogger(test.class);
    	
	
//oshi方法获取cpu信息		
public static void main(String[] args) throws Exception {
	//1、获取cpu信息
		while(true) {
	        SystemInfo systemInfo = new SystemInfo();
	        CentralProcessor processor = systemInfo.getHardware().getProcessor();
	        long[] prevTicks = processor.getSystemCpuLoadTicks();
	        long[] ticks = processor.getSystemCpuLoadTicks();
	        long nice = ticks[CentralProcessor.TickType.NICE.getIndex()] - prevTicks[CentralProcessor.TickType.NICE.getIndex()];
	        long irq = ticks[CentralProcessor.TickType.IRQ.getIndex()] - prevTicks[CentralProcessor.TickType.IRQ.getIndex()];
	        long softirq = ticks[CentralProcessor.TickType.SOFTIRQ.getIndex()] - prevTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()];
	        long steal = ticks[CentralProcessor.TickType.STEAL.getIndex()] - prevTicks[CentralProcessor.TickType.STEAL.getIndex()];
	        long cSys = ticks[CentralProcessor.TickType.SYSTEM.getIndex()] - prevTicks[CentralProcessor.TickType.SYSTEM.getIndex()];
	        long user = ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()];
	        long iowait = ticks[CentralProcessor.TickType.IOWAIT.getIndex()] - prevTicks[CentralProcessor.TickType.IOWAIT.getIndex()]; 
	        long idle = ticks[CentralProcessor.TickType.IDLE.getIndex()] - prevTicks[CentralProcessor.TickType.IDLE.getIndex()];
	        long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;
	        
	        logger.info("CPU总数 = {},CPU利用率 ={}",processor.getLogicalProcessorCount(),new DecimalFormat("#.##%").format(1.0-(idle * 1.0 / totalCpu)));
	        
	        Thread.sleep(2000);
	      
	       System.out.println("系统开始时间:"+System.currentTimeMillis());
	       
	       System.out.println("cpu利用率:"+(1.0-(idle * 1.0 / totalCpu)));
	       
	   //2、获取当前系统时间
	        long startTime =  System.currentTimeMillis();//初始时间
	        //获取当前的系统时间,与初始时间相减就是程序运行的毫秒数,除以1000就是秒数
			long endTime =  System.currentTimeMillis();
			long usedTime = (endTime-startTime)/1000;
	
	        
	  //3、获取内存信息    
		        GlobalMemory memory = systemInfo.getHardware().getMemory();
		        long totalByte = memory.getTotal();
		        long acaliableByte = memory.getAvailable();
				
		        logger.info("可用内存大小 = {},内存使用率 ={}",formatByte(totalByte),new DecimalFormat("#.##%").format((totalByte-acaliableByte)*1.0/totalByte));
		        Thread.sleep(1000);
		}
	
		
	}
     //3、获取内存信息调用
  public static String formatByte(long bNumber){
    double formatB = 1024.0;
    double kNumber = bNumber/formatB;
    if(kNumber<formatB){
        return new DecimalFormat("#.##KB").format(kNumber);
    }
    double mbNumber = kNumber/formatB;
    if(mbNumber<formatB){
        return new DecimalFormat("#.##MB").format(mbNumber);
    }
    double gbNumber = mbNumber/formatB;
    if(gbNumber<formatB){
        return new DecimalFormat("#.##GB").format(gbNumber);
    }
    double tbNumber = gbNumber/formatB;
    return new DecimalFormat("#.##TB").format(tbNumber);
}

}

大功告成!
亲测有效!

你可能感兴趣的:(Java知识总结,cpu,java)