Java获取系统信息

Wesley13
• 阅读 585
/**
 * @version 1.0
 * @author 勋辉
 * @createDate 2014年3月15日 上午10:02:18
 * @since JDK1.6
 *  
 * 
 */
package com.topwalk.moc.etl.util;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.hyperic.sigar.CpuPerc;
import org.hyperic.sigar.FileSystem;
import org.hyperic.sigar.FileSystemUsage;
import org.hyperic.sigar.Mem;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;

public class SystemInfoUtils {
    
    private static Logger logger = Logger.getLogger(SystemInfoUtils.class);
    public static void main(String[] args) {
        getDiskInfo();
    }
    
    /**
     * 获取CPU使用率
     * @Title: getCpuPerc
     * @return        double
     * @exception   异常
     * @throws
     * @see                   需要参见的其它内容
     * @since        ISSP v1.5
     * @author        勋辉
     * @time         2014年3月15日上午10:40:21
     */
    public static double  getCpuPerc(){
        Sigar sigar = new Sigar();
        CpuPerc cpuPerc[] =null;
        double result =0d;
        try {
            /* CPU 信息列表 */
            cpuPerc=sigar.getCpuPercList();
            List<BigDecimal> list = new ArrayList<BigDecimal>();
            /* 获取每颗CPU的总共使用量  */
            for (int i = 0; i < cpuPerc.length; i++) {
                printCpuInfo(cpuPerc[i],i);
                BigDecimal b = new BigDecimal(Double.toString(cpuPerc[i].getCombined()));
                list.add(b);
            }
            /* 相加 */
            BigDecimal add = list.get(0);
            for (int i = 1; i < list.size(); i++) {
                add=add.add(list.get(i));
            }
            /* 求平均值 */
            result = add.divide(new BigDecimal(list.size()),2,RoundingMode.HALF_EVEN).doubleValue();
        } catch (SigarException e) {
            logger.error("[获取CPU使用率失败]",e);
        }
        return result;
    }
    
    
    private static void printCpuInfo(CpuPerc cpuPerc,int i ){
        logger.debug("[ CPU"+i+"   ]总共使用率:"+CpuPerc.format(cpuPerc.getCombined())+" ]");
    }
    
    
    /**
     * 获取内存信息
     * @Title: getPhysicalMemory
     * @param        
     * @return        void
     * @exception   异常
     * @throws
     * @see                   需要参见的其它内容
     * @since        ISSP v1.5
     * @author        勋辉
     * @time         2014年3月15日上午10:50:55
     */
    public static double getPhysicalMemory(){
        double result = 0d;
        Sigar sigar = new Sigar();
        Mem men = null;
        try {
            men=sigar.getMem();
            logger.debug("[系统内存总量:"+men.getTotal()/1024L+"k]");
            logger.debug("[系统内存用量:"+men.getUsed()/1024L+"k]");
            logger.debug("[使用率百分比:"+men.getUsedPercent()+"]");
            
            BigDecimal userPrect = new BigDecimal(men.getUsedPercent());
            result = userPrect.divide(new BigDecimal(1),2,RoundingMode.HALF_EVEN).doubleValue();
            
        } catch (SigarException e) {
            logger.error("[获取系统内存使用率]",e);
        }
        return result;
    }
    
    
    /**
     * 获取磁盘信息
     * @Title: getDiskInfo
     * @param        
     * @return        void
     * @exception   异常
     * @throws
     * @see                   需要参见的其它内容
     * @since        ISSP v1.5
     * @author        勋辉
     * @time         2014年3月15日上午11:47:06
     */
    public static double getDiskInfo(){
        double result = 0d;
        BigDecimal total = new BigDecimal(0);
        BigDecimal used = new BigDecimal(0);
        Sigar sigar = new Sigar();  
        
         try {
            FileSystem fslist[] = sigar.getFileSystemList();  
             // String dir = System.getProperty("user.home");// 当前用户文件夹路径  
             for (int i = 0; i < fslist.length; i++) {  
                 FileSystem fs = fslist[i];  
                 FileSystemUsage usage = null;  
                 try {  
                     usage = sigar.getFileSystemUsage(fs.getDirName());  
                 } catch (SigarException e) {  
                     if (fs.getType() == 2)  
                     continue;  
                 }  
                 switch (fs.getType()) {  
                 case 0: // TYPE_UNKNOWN :未知  
                     break;  
                 case 1: // TYPE_NONE  
                     break;  
                 case 2: // TYPE_LOCAL_DISK : 本地硬盘  
                     // 文件系统总大小  
                     total= total.add(new BigDecimal((float)usage.getTotal()/1024/1024));
                     // 文件系统已经使用量  
                     used=used.add(new BigDecimal((float)usage.getUsed()/1024/1024));
                     break;  
                 case 3:// TYPE_NETWORK :网络  
                     break;  
                 case 4:// TYPE_RAM_DISK :闪存  
                     break;  
                 case 5:// TYPE_CDROM :光驱  
                     break;  
                 case 6:// TYPE_SWAP :页面交换  
                     break;  
                 }  
             }
        } catch (SigarException e) {
            e.printStackTrace();
        }  
        result=used.divide(total,2,RoundingMode.HALF_EVEN).doubleValue();
        return result;
    }
}

API地址:http://www.hyperic.com/support/docs/sigar/org/hyperic/sigar/Sigar.html

主页 : https://support.hyperic.com/display/SIGAR/Home

下载地址 :

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java 复制Map对象(深拷贝与浅拷贝)
java复制Map对象(深拷贝与浅拷贝)CreationTime2018年6月4日10点00分Author:Marydon1.深拷贝与浅拷贝  浅拷贝:只复制对象的引用,两个引用仍然指向同一个对象
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
kenx kenx
3年前
个人博客开发之blog-api项目统一结果集api封装
前言由于返回jsonapi格式接口,所以我们需要通过javabean封装一个统一数据返回格式,便于和前端约定交互,状态码枚举ResultCodejavapackagecn.soboys.core.ret;importlombok.Getter;/@authorkenx@version1.0@date2021/6/1715:35
Wesley13 Wesley13
3年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Wesley13 Wesley13
3年前
Java解析XML
xml报文<?xmlversion'1.0'encoding'utf8'?<bookstore<bookid'1'<name冰与火之歌</name<author乔治马丁</author<year2014</yea
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
oracle查询表数据并重新插入到本表
oracle查询表数据并重新插入到本表CreateTime2018年5月17日10:30:10Author:Marydon1.情景描述查询表中数据SELECTFROMat_aut