Java使用siger开源包获取服务器硬件信息(CPU 内存 网络 io等)
通过使用第三方开源jar包sigar.jar我们可以获得本地的信息
1.下载sigar.jar
sigar官方主页
sigar-1.6.4.zip
2.按照主页上的说明解压包后将相应的文件copy到java路径。比如windows32位操作系统需要将lib中sigar-x86-winnt.dll文件拷贝到java SDK目录的bin内
参考官方主页上的配置项。
3.代码实现
示例java项目下载地址:/detail/jifeng3518/4305325
.InetAddress;
.UnknownHostException;
importjava.util.Map;
importjava.util.Properties;
importorg.hyperic.sigar.CpuInfo;
importorg.hyperic.sigar.CpuPerc;
importorg.hyperic.sigar.FileSystem;
importorg.hyperic.sigar.FileSystemUsage;
importorg.hyperic.sigar.Mem;
importorg.Flags;
importorg.InterfaceConfig;
importorg.InterfaceStat;
importorg.hyperic.sigar.OperatingSystem;
importorg.hyperic.sigar.Sigar;
importorg.hyperic.sigar.SigarException;
importorg.hyperic.sigar.Swap;
importorg.hyperic.sigar.Who;
publicclassRuntimeTest{
publicstaticvoidmain(String[]args){
try{
//System信息,从jvm获取
property();
System.out.println("----------------------------------");
//cpu信息
cpu();
System.out.println("----------------------------------");
//内存信息
memory();
System.out.println("----------------------------------");
//操作系统信息
os();
System.out.println("----------------------------------");
//用户信息
who();
System.out.println("----------------------------------");
//文件系统信息
file();
System.out.println("----------------------------------");
//网络信息
net();
System.out.println("----------------------------------");
//以太网信息
ethernet();
System.out.println("----------------------------------");
}catch(Exceptione1){
e1.printStackTrace();
}
}
privatestaticvoidproperty()throwsUnknownHostException{
Runtimer=Runtime.getRuntime();
Propertiesprops=System.getProperties();
InetAddressaddr;
addr=InetAddress.getLocalHost();
Stringip=addr.getHostAddress();
Map<String,String>map=System.getenv();
StringuserName=map.get("USERNAME");//获取用户名
StringcomputerName=map.get("COMPUTERNAME");//获取计算机名
StringuserDomain=map.get("USERDOMAIN");//获取计算机域名
System.out.println("用户名:"+userName);
System.out.println("计算机名:"+computerName);
System.out.println("计算机域名:"+userDomain);
System.out.println("本地ip地址:"+ip);
System.out.println("本地主机名:"+addr.getHostName());
System.out.println("JVM可以使用的总内存:"+r.totalMemory());
System.out.println("JVM可以使用的剩余内存:"+r.freeMemory());
System.out.println("JVM可以使用的处理器个数:"+r.availableProcessors());
System.out.println("Java的运行环境版本:"+props.getProperty("java.version"));
System.out.println("Java的运行环境供应商:"+props.getProperty("java.vendor"));
System.out.println("Java供应商的URL:"+props.getProperty("java.vendor.url"));
System.out.println("Java的安装路径:"+props.getProperty("java.home"));
System.out.println("Java的虚拟机规范版本:"+props.getProperty("java.vm.specification.version"));
System.out.println("Java的虚拟机规范供应商:"+props.getProperty("java.vm.specification.vendor"));
System.out.println("Java的虚拟机规范名称:"+props.getProperty("java.vm.specification.name"));
System.out.println("Java的虚拟机实现版本:"+props.getProperty("java.vm.version"));
System.out.println("Java的虚拟机实现供应商:"+props.getProperty("java.vm.vendor"));
System.out.println("Java的虚拟机实现名称:"+props.getProperty("java.vm.name"));
System.out.println("Java运行时环境规范版本:"+props.getProperty("java.specification.version"));
System.out.println("Java运行时环境规范供应商:"+props.getProperty("java.specification.vender"));
System.out.println("Java运行时环境规范名称:"+props.getProperty("java.specification.name"));
System.out.println("Java的类格式版本号:"+props.getProperty("java.class.version"));
System.out.println("Java的类路径:"+props.getProperty("java.class.path"));
System.out.println("加载库时搜索的路径列表:"+props.getProperty("java.library.path"));
System.out.println("默认的临时文件路径:"+props.getProperty("java.io.tmpdir"));
System.out.println("一个或多个扩展目录的路径:"+props.getProperty("java.ext.dirs"));
System.out.println("操作系统的名称:"+props.getProperty("os.name"));
System.out.println("操作系统的构架:"+props.getProperty("os.arch"));
System.out.println("操作系统的版本:"+props.getProperty("os.version"));
System.out.println("文件分隔符:"+props.getProperty("file.separator"));
System.out.println("路径分隔符:"+props.getProperty("path.separator"));
System.out.println("行分隔符:"+props.getProperty("line.separator"));
System.out.println("用户的账户名称:"+props.getProperty("user.name"));
System.out.println("用户的主目录:"+props.getProperty("user.home"));
System.out.println("用户的当前工作目录:"+props.getProperty("user.dir"));
}
privatestaticvoidmemory()throwsSigarException{
Sigarsigar=newSigar();
Memmem=sigar.getMem();
//内存总量
System.out.println("内存总量:"+mem.getTotal()/1024L+"Kav");
//当前内存使用量
System.out.println("当前内存使用量:"+mem.getUsed()/1024L+"Kused");
//当前内存剩余量
System.out.println("当前内存剩余量:"+mem.getFree()/1024L+"Kfree");
Swapswap=sigar.getSwap();
//交换区总量
System.out.println("交换区总量:"+swap.getTotal()/1024L+"Kav");
//当前交换区使用量
System.out.println("当前交换区使用量:"+swap.getUsed()/1024L+"Kused");
//当前交换区剩余量
System.out.println("当前交换区剩余量:"+swap.getFree()/1024L+"Kfree");
}
privatestaticvoidcpu()throwsSigarException{
Sigarsigar=newSigar();
CpuInfoinfos[]=sigar.getCpuInfoList();
CpuPerccpuList[]=null;
cpuList=sigar.getCpuPercList();
for(inti=0;i<infos.length;i++){//不管是单块CPU还是多CPU都适用
CpuInfoinfo=infos[i];
System.out.println("第"+(i+1)+"块CPU信息");
System.out.println("CPU的总量MHz:"+info.getMhz());//CPU的总量MHz
System.out.println("CPU生产商:"+info.getVendor());//获得CPU的卖主,如:Intel
System.out.println("CPU类别:"+info.getModel());//获得CPU的类别,如:Celeron
System.out.println("CPU缓存数量:"+info.getCacheSize());//缓冲存储器数量
printCpuPerc(cpuList[i]);
}
}
privatestaticvoidprintCpuPerc(CpuPerccpu){
System.out.println("CPU用户使用率:"+CpuPerc.format(cpu.getUser()));//用户使用率
System.out.println("CPU系统使用率:"+CpuPerc.format(cpu.getSys()));//系统使用率
System.out.println("CPU当前等待率:"+CpuPerc.format(cpu.getWait()));//当前等待率
System.out.println("CPU当前错误率:"+CpuPerc.format(cpu.getNice()));//
System.out.println("CPU当前空闲率:"+CpuPerc.format(cpu.getIdle()));//当前空闲率
System.out.println("CPU总的使用率:"+CpuPerc.format(cpu.getCombined()));//总的使用率
}
privatestaticvoidos(){
OperatingSystemOS=OperatingSystem.getInstance();
//操作系统内核类型如:386、486、586等x86
System.out.println("操作系统:"+OS.getArch());
System.out.println("操作系统CpuEndian():"+OS.getCpuEndian());//
System.out.println("操作系统DataModel():"+OS.getDataModel());//
//系统描述
System.out.println("操作系统的描述:"+OS.getDescription());
//操作系统类型
//System.out.println("OS.getName():"+OS.getName());
//System.out.println("OS.getPatchLevel():"+OS.getPatchLevel());//
//操作系统的卖主
System.out.println("操作系统的卖主:"+OS.getVendor());
//卖主名称
System.out.println("操作系统的卖主名:"+OS.getVendorCodeName());
//操作系统名称
System.out.println("操作系统名称:"+OS.getVendorName());
//操作系统卖主类型
System.out.println("操作系统卖主类型:"+OS.getVendorVersion());
//操作系统的版本号
System.out.println("操作系统的版本号:"+OS.getVersion());
}
privatestaticvoidwho()throwsSigarException{
Sigarsigar=newSigar();
Whowho[]=sigar.getWhoList();
if(who!=null&&who.length>0){
for(inti=0;i<who.length;i++){
//System.out.println("当前系统进程表中的用户名"+String.valueOf(i));
Who_who=who[i];
System.out.println("用户控制台:"+_who.getDevice());
System.out.println("用户host:"+_who.getHost());
//System.out.println("getTime():"+_who.getTime());
//当前系统进程表中的用户名
System.out.println("当前系统进程表中的用户名:"+_who.getUser());
}
}
}
privatestaticvoidfile()throwsException{
Sigarsigar=newSigar();
FileSystemfslist[]=sigar.getFileSystemList();
for(inti=0;i<fslist.length;i++){
System.out.println("分区的盘符名称"+i);
FileSystemfs=fslist[i];
//分区的盘符名称
System.out.println("盘符名称:"+fs.getDevName());
//分区的盘符名称
System.out.println("盘符路径:"+fs.getDirName());
System.out.println("盘符标志:"+fs.getFlags());//
//文件系统类型,比如FAT32、NTFS
System.out.println("盘符类型:"+fs.getSysTypeName());
//文件系统类型名,比如本地硬盘、光驱、网络文件系统等
System.out.println("盘符类型名:"+fs.getTypeName());
//文件系统类型
System.out.println("盘符文件系统类型:"+fs.getType());
FileSystemUsageusage=null;
usage=sigar.getFileSystemUsage(fs.getDirName());
switch(fs.getType()){
case0://TYPE_UNKNOWN:未知
break;
case1://TYPE_NONE
break;
case2://TYPE_LOCAL_DISK:本地硬盘
//文件系统总大小
System.out.println(fs.getDevName()+"总大小:"+usage.getTotal()+"KB");
//文件系统剩余大小
System.out.println(fs.getDevName()+"剩余大小:"+usage.getFree()+"KB");
//文件系统可用大小
System.out.println(fs.getDevName()+"可用大小:"+usage.getAvail()+"KB");
//文件系统已经使用量
System.out.println(fs.getDevName()+"已经使用量:"+usage.getUsed()+"KB");
doubleusePercent=usage.getUsePercent()*100D;
//文件系统资源的利用率
System.out.println(fs.getDevName()+"资源的利用率:"+usePercent+"%");
break;
case3://TYPE_NETWORK:网络
break;
case4://TYPE_RAM_DISK:闪存
break;
case5://TYPE_CDROM:光驱
break;
case6://TYPE_SWAP:页面交换
break;
}
System.out.println(fs.getDevName()+"读出:"+usage.getDiskReads());
System.out.println(fs.getDevName()+"写入:"+usage.getDiskWrites());
}
return;
}
privatestaticvoidnet()throwsException{
Sigarsigar=newSigar();
StringifNames[]=sigar.getNetInterfaceList();
for(inti=0;i<ifNames.length;i++){
Stringname=ifNames[i];
NetInterfaceConfigifconfig=sigar.getNetInterfaceConfig(name);
System.out.println("网络设备名:"+name);//网络设备名
System.out.println("IP地址:"+ifconfig.getAddress());//IP地址
System.out.println("子网掩码:"+ifconfig.getNetmask());//子网掩码
if((ifconfig.getFlags()&1L)<=0L){
System.out.println("!IFF_UP...skippinggetNetInterfaceStat");
continue;
}
NetInterfaceStatifstat=sigar.getNetInterfaceStat(name);
System.out.println(name+"接收的总包裹数:"+ifstat.getRxPackets());//接收的总包裹数
System.out.println(name+"发送的总包裹数:"+ifstat.getTxPackets());//发送的总包裹数
System.out.println(name+"接收到的总字节数:"+ifstat.getRxBytes());//接收到的总字节数
System.out.println(name+"发送的总字节数:"+ifstat.getTxBytes());//发送的总字节数
System.out.println(name+"接收到的错误包数:"+ifstat.getRxErrors());//接收到的错误包数
System.out.println(name+"发送数据包时的错误数:"+ifstat.getTxErrors());//发送数据包时的错误数
System.out.println(name+"接收时丢弃的包数:"+ifstat.getRxDropped());//接收时丢弃的包数
System.out.println(name+"发送时丢弃的包数:"+ifstat.getTxDropped());//发送时丢弃的包数
}
}
privatestaticvoidethernet()throwsSigarException{
Sigarsigar=null;
sigar=newSigar();
String[]ifaces=sigar.getNetInterfaceList();
for(inti=0;i<ifaces.length;i++){
NetInterfaceConfigcfg=sigar.getNetInterfaceConfig(ifaces[i]);
if(NetFlags.LOOPBACK_ADDRESS.equals(cfg.getAddress())||(cfg.getFlags()&NetFlags.IFF_LOOPBACK)!=0
||NetFlags.NULL_HWADDR.equals(cfg.getHwaddr())){
continue;
}
System.out.println(cfg.getName()+"IP地址:"+cfg.getAddress());//IP地址
System.out.println(cfg.getName()+"网关广播地址:"+cfg.getBroadcast());//网关广播地址
System.out.println(cfg.getName()+"网卡MAC地址:"+cfg.getHwaddr());//网卡MAC地址
System.out.println(cfg.getName()+"子网掩码:"+cfg.getNetmask());//子网掩码
System.out.println(cfg.getName()+"网卡描述信息:"+cfg.getDescription());//网卡描述信息
System.out.println(cfg.getName()+"网卡类型"+cfg.getType());//
}
}
}
运行结果:
用户名:Administrator
计算机名:UCIT_JIF
计算机域名:UCIT_JIF
本地ip地址:192.168.2.153
本地主机名:UCIT_Jif
JVM可以使用的总内存:16252928
JVM可以使用的剩余内存:15866248
JVM可以使用的处理器个数:2
Java的运行环境版本:1.6.0_18
Java的运行环境供应商:Sun Microsystems Inc.
Java供应商的URL:/
Java的安装路径:C:\java\jre6
Java的虚拟机规范版本:1.0
Java的虚拟机规范供应商:Sun Microsystems Inc.
Java的虚拟机规范名称:Java Virtual Machine Specification
Java的虚拟机实现版本:16.0-b13
Java的虚拟机实现供应商:Sun Microsystems Inc.
Java的虚拟机实现名称:Java HotSpot(TM) Client VM
Java运行时环境规范版本:1.6
Java运行时环境规范供应商:null
Java运行时环境规范名称:Java Platform API Specification
Java的类格式版本号:50.0
Java的类路径:D:\eclipse3.6\eclipse\workspace\sigar\bin;D:\eclipse3.6\eclipse\workspace\sigar\lib\sigar.jar;D:\eclipse3.6\eclipse\workspace\sigar\lib\.sigar_shellrc;D:\eclipse3.6\eclipse\workspace\sigar\lib\sigar-x86-winnt.dll;D:\eclipse3.6\eclipse\workspace\sigar\lib\sigar-x86-winnt.lib;D:\eclipse3.6\eclipse\workspace\sigar\lib\libsigar-x86-linux.so
加载库时搜索的路径列表:C:\java\jre6\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\NVIDIA Corporation\PhysX\Common;C:\PHP\;D:\oracle\product\10.2.0\client_2\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\java\jdk1.6.0_18\bin;C:\Program Files\TortoiseSVN\bin;C:\Progra~1\GnuWin32\bin;C:\Program Files\goodvpn\bin;D:\Program Files\PowerCmd;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\Common Files\Adobe\AGL;C:\apache-ant-1.8.2\bin;D:\Program Files\Rational\common;C:\Program Files\StormII\Codec;C:\Program Files\StormII;C:\Program Files\SSH Communications Security\SSH Secure Shell;;;C:\Program Files\OpenVPN\bin;C:\Program Files\OpenVPN64\bin
默认的临时文件路径:C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\
一个或多个扩展目录的路径:C:\java\jre6\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
操作系统的名称:Windows XP
操作系统的构架:x86
操作系统的版本:5.1
文件分隔符:\
路径分隔符:;
行分隔符:
用户的账户名称:Administrator
用户的主目录:C:\Documents and Settings\Administrator
用户的当前工作目录:D:\eclipse3.6\eclipse\workspace\sigar
----------------------------------
第1块CPU信息
CPU的总量MHz:3015
CPU生产商:AMD
CPU类别:Athlon
CPU缓存数量:-1
CPU用户使用率:3.1%
CPU系统使用率:9.3%
CPU当前等待率:0.0%
CPU当前错误率:0.0%
CPU当前空闲率:87.4%
CPU总的使用率:12.5%
第2块CPU信息
CPU的总量MHz:3015
CPU生产商:AMD
CPU类别:Athlon
CPU缓存数量:-1
CPU用户使用率:0.0%
CPU系统使用率:3.2%
CPU当前等待率:0.0%
CPU当前错误率:0.0%
CPU当前空闲率:96.8%
CPU总的使用率:3.2%
----------------------------------
内存总量:3275880K av
当前内存使用量:1698960K used
当前内存剩余量:1576920K free
交换区总量:5206208K av
当前交换区使用量:2062372K used
当前交换区剩余量:3143836K free
----------------------------------
操作系统:x86
操作系统CpuEndian():little
操作系统DataModel():32
操作系统的描述:Microsoft Windows XP
操作系统的卖主:Microsoft
操作系统的卖主名:Whistler
操作系统名称:Windows XP
操作系统卖主类型:XP
操作系统的版本号:5.1
----------------------------------
用户控制台:console
用户host:NT AUTHORITY
当前系统进程表中的用户名:LOCAL SERVICE
用户控制台:console
用户host:NT AUTHORITY
当前系统进程表中的用户名:NETWORK SERVICE
用户控制台:Console
用户host:UCIT_JIF
当前系统进程表中的用户名:Administrator
用户控制台:console
用户host:NT AUTHORITY
当前系统进程表中的用户名:SYSTEM
----------------------------------
分区的盘符名称0
盘符名称:C:\
盘符路径:C:\
盘符标志:0
盘符类型:FAT32
盘符类型名:local
盘符文件系统类型:2
C:\总大小:47159808KB
C:\剩余大小:9771792KB
C:\可用大小:9771792KB
C:\已经使用量:37388016KB
C:\资源的利用率:80.0%
C:\读出:45669
C:\写入:43176
分区的盘符名称1
盘符名称:D:\
盘符路径:D:\
盘符标志:0
盘符类型:NTFS
盘符类型名:local
盘符文件系统类型:2
D:\总大小:133186848KB
D:\剩余大小:65896436KB
D:\可用大小:65896436KB
D:\已经使用量:67290412KB
D:\资源的利用率:51.0%
D:\读出:41299
D:\写入:40369
分区的盘符名称2
盘符名称:E:\
盘符路径:E:\
盘符标志:0
盘符类型:NTFS
盘符类型名:local
盘符文件系统类型:2
E:\总大小:154151672KB
E:\剩余大小:82892352KB
E:\可用大小:82892352KB
E:\已经使用量:71259320KB
E:\资源的利用率:47.0%
E:\读出:21383
E:\写入:728
分区的盘符名称3
盘符名称:F:\
盘符路径:F:\
盘符标志:0
盘符类型:NTFS
盘符类型名:local
盘符文件系统类型:2
F:\总大小:153862504KB
F:\剩余大小:33843680KB
F:\可用大小:33843680KB
F:\已经使用量:120018824KB
F:\资源的利用率:79.0%
F:\读出:14
F:\写入:24
----------------------------------
网络设备名:eth0
IP地址:0.0.0.0
子网掩码:0.0.0.0
!IFF_UP...skipping getNetInterfaceStat
网络设备名:eth1
IP地址:0.0.0.0
子网掩码:0.0.0.0
!IFF_UP...skipping getNetInterfaceStat
网络设备名:eth2
IP地址:192.168.2.153
子网掩码:255.255.255.0
eth2接收的总包裹数:105678
eth2发送的总包裹数:21919
eth2接收到的总字节数:24269582
eth2发送的总字节数:8721544
eth2接收到的错误包数:0
eth2发送数据包时的错误数:0
eth2接收时丢弃的包数:0
eth2发送时丢弃的包数:0
网络设备名:eth3
IP地址:192.168.184.1
子网掩码:255.255.255.0
eth3接收的总包裹数:144
eth3发送的总包裹数:146
eth3接收到的总字节数:16861
eth3发送的总字节数:16969
eth3接收到的错误包数:0
eth3发送数据包时的错误数:0
eth3接收时丢弃的包数:0
eth3发送时丢弃的包数:0
网络设备名:eth4
IP地址:192.168.92.1
子网掩码:255.255.255.0
eth4接收的总包裹数:144
eth4发送的总包裹数:146
eth4接收到的总字节数:16861
eth4发送的总字节数:16969
eth4接收到的错误包数:0
eth4发送数据包时的错误数:0
eth4接收时丢弃的包数:0
eth4发送时丢弃的包数:0
网络设备名:lo0
IP地址:127.0.0.1
子网掩码:255.0.0.0
lo0接收的总包裹数:94004
lo0发送的总包裹数:94004
lo0接收到的总字节数:15416919
lo0发送的总字节数:15416919
lo0接收到的错误包数:0
lo0发送数据包时的错误数:0
lo0接收时丢弃的包数:0
lo0发送时丢弃的包数:0
----------------------------------
eth0IP地址:0.0.0.0
eth0网关广播地址:255.255.255.255
eth0网卡MAC地址:00:FF:79:6B:AF:45
eth0子网掩码:0.0.0.0
eth0网卡描述信息:TAP-Win32 Adapter V8 #3 - ????ü??????ò?
eth0网卡类型Ethernet
eth1IP地址:0.0.0.0
eth1网关广播地址:255.255.255.255
eth1网卡MAC地址:00:FF:C9:53:0A:58
eth1子网掩码:0.0.0.0
eth1网卡描述信息:TAP-Win32 Adapter V8 #2 - ????ü??????ò?
eth1网卡类型Ethernet
eth2IP地址:192.168.2.153
eth2网关广播地址:192.168.2.255
eth2网卡MAC地址:00:21:86:4D:23:26
eth2子网掩码:255.255.255.0
eth2网卡描述信息:NVIDIA nForce Networking Controller - ????ü??????ò?
eth2网卡类型Ethernet
eth3IP地址:192.168.184.1
eth3网关广播地址:192.168.184.255
eth3网卡MAC地址:00:50:56:C0:00:01
eth3子网掩码:255.255.255.0
eth3网卡描述信息:VMware Virtual Ethernet Adapter for VMnet1
eth3网卡类型Ethernet
eth4IP地址:192.168.92.1
eth4网关广播地址:192.168.92.255
eth4网卡MAC地址:00:50:56:C0:00:08
eth4子网掩码:255.255.255.0
eth4网卡描述信息:VMware Virtual Ethernet Adapter for VMnet8
eth4网卡类型Ethernet
参考:/jifeng/archive//05/16/2503519.html