文档章节

Java获取系统信息

秦都李先生
 秦都李先生
发布于 2014/04/21 14:36
字数 574
阅读 116
收藏 1
/**
 * @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

下载地址 : 

© 著作权归作者所有

秦都李先生
粉丝 18
博文 63
码字总数 40823
作品 0
海淀
产品经理
私信 提问
加载中

评论(2)

JimmyZh
JimmyZh
cpu使用率通过相加取平均值办法算出结果和windows任务管理器看到的值相差比较大,郁闷。
冯丹菜菜
冯丹菜菜
不错
JVM Management API

JVM本 身提供了一组管理的API,通过该API,我们可以获取得到JVM内部主要运行信息,包括内存各代的数据、JVM当前所有线程及其栈相关信息等等。各种 JDK自带的剖析工具,包括jps、jstack、jin...

今幕明
2014/09/09
126
0
无意间做了个 web 版的 JVM 监控端(前后端分离 React+Spring Boot)

之前写了JConsole、VisualVM 依赖的 JMX 技术,然后放出了一个用纯 JMX 实现的 web 版本的 JConsole 的截图,今天源码来了。 本来就是为了更多的了解 JMX,第一步就想把所有的 MBean 和属性都...

风的姿态
10/15
0
0
部署在Tomcat 服务器中的web应用读取时间与系统时间不一致问题 【靠谱】

我在部署应用到Ubantu系统上的tomcat服务器中运行,发现操作系统的时间和tomcat中的应用程序获取的时间不一致,总是相差8个小时,但是查看当前操作系统的时区也是CST时区(中国标准时区)。 ...

Airship
04/22
36
0
UAVStack功能上新:新增JVM监控分析工具

UAVStack推出的JVM监控分析工具提供基于页面的展现方式,以图形化的方式展示采集到的监控数据;同时提供JVM基本参数获取、内存dump、线程分析、内存分配采样和热点方法分析等功能。 引言 作为...

宜信技术学院
10/15
41
0
跟我学系列之JVM远程监控编写(一)

从JAVA 5开始,JDK提供了一些JVM检测的API,这就是有名的java.lang.management 包,包里提供了许多MXBean的接口类,可以很方便的获取到JVM的内存、GC、线程、锁、class、甚至操作系统层面的各...

colincheng
2015/10/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

idea修改新的git地址

我们在项目变动中通常会遇到更换git地址情况,这里介绍一个在idea项目中简单更换git地址操作: 1、点击VCS; 2、点击Git; 3、点击Remotes; 具体步骤如图 4、点击框中链接即可在右边看到一个...

west_coast
17分钟前
6
0
将规则集传递给mixin

允许包装在mixin中定义的css块。 分离的规则集是一组CSS属性、嵌套规则集、媒体声明或者是存储在变量中的任何其他内容,我们可以将它包含在规则集中或其他结构中,并且所有属性都将复制到那里...

凌兮洛
19分钟前
4
0
玩转阿里云 Terraform(一):Terraform 是什么

从本文起,我将陆续推出一系列有关 Terraform 的文章,从概念,特点,工作机制,用法以及最佳实践等多个方面由浅入深的向大家介绍如何在阿里云上玩转 Terraform。同时也希望借此机会,与感兴...

阿里云官方博客
19分钟前
4
0
科研大数据面临的挑战

近几十年硬件的发展非常迅猛,第一台Macintosh苹果电脑的内存是128KB(0.13MB),现在很多笔记本配的是8GB的内存,硬盘1TB(1024GB),2TB的很常见。大型的数据服务器上还会有更大的储容量,...

英论阁学术院
19分钟前
5
0
python学习10.09:Python列表和元组的底层实现

有关列表(list)和元组(tuple)的底层实现,本节分别从它们的源码来进行分析。 首先来分析 list 列表,它的具体结构如下所示: typedef struct { PyObject_VAR_HEAD /* Vector o...

太空堡垒185
20分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部