|
@ -9,7 +9,8 @@ import java.text.DecimalFormat;
|
|
|
import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* sigar 服务器硬件指标 工具类
|
|
|
* sigar 服务器硬件指标 工具类
|
|
|
*
|
|
|
* @author HZY
|
|
|
* @vsrsion 1.0
|
|
|
* Created at 2016/10/10.
|
|
@ -17,6 +18,7 @@ import java.util.*;
|
|
|
public class SigarUtil {
|
|
|
|
|
|
public final static Sigar sigar = initSigar();
|
|
|
|
|
|
private static Sigar initSigar() {
|
|
|
try {
|
|
|
//此处只为得到依赖库文件的目录,可根据实际项目自定义
|
|
@ -39,7 +41,7 @@ public class SigarUtil {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public URL getUrl(){
|
|
|
public URL getUrl() {
|
|
|
return this.getClass().getResource("/");
|
|
|
}
|
|
|
|
|
@ -53,9 +55,10 @@ public class SigarUtil {
|
|
|
|
|
|
/**
|
|
|
* 是否是windows系统
|
|
|
*
|
|
|
* @return
|
|
|
*/
|
|
|
public static boolean isOSWin(){//OS 版本判断
|
|
|
public static boolean isOSWin() {//OS 版本判断
|
|
|
String OS = System.getProperty("os.name").toLowerCase();
|
|
|
if (OS.indexOf("win") >= 0) {
|
|
|
return true;
|
|
@ -66,6 +69,7 @@ public class SigarUtil {
|
|
|
|
|
|
/**
|
|
|
* 系统信息 jvm等
|
|
|
*
|
|
|
* @throws UnknownHostException
|
|
|
*/
|
|
|
private static void property() throws UnknownHostException {
|
|
@ -117,41 +121,43 @@ public class SigarUtil {
|
|
|
|
|
|
/**
|
|
|
* 内存信息
|
|
|
*
|
|
|
* @return 返回单位 :G
|
|
|
* @throws SigarException
|
|
|
*/
|
|
|
public static Map<String,Object> memory() throws SigarException {
|
|
|
public static Map<String, Object> memory() throws SigarException {
|
|
|
Mem mem = sigar.getMem();
|
|
|
Swap swap = sigar.getSwap();
|
|
|
Map<String,Object> memory = new HashMap<>();
|
|
|
memory.put("total",mem.getTotal() / 1024L/ 1024L/ 1024L);
|
|
|
memory.put("used",mem.getUsed() / 1024L / 1024L/ 1024L);
|
|
|
memory.put("free",mem.getFree() / 1024L / 1024L/ 1024L);
|
|
|
memory.put("freePerc",mem.getFreePercent());
|
|
|
memory.put("usedPerc",mem.getUsedPercent());
|
|
|
Map<String, Object> memory = new HashMap<>();
|
|
|
memory.put("total", getDouble((double)mem.getTotal() / 1024L / 1024L / 1024L));
|
|
|
memory.put("used", getDouble((double)mem.getUsed() / 1024L / 1024L / 1024L));
|
|
|
memory.put("free", getDouble((double)mem.getFree() / 1024L / 1024L / 1024L));
|
|
|
memory.put("freePerc", getDouble(mem.getFreePercent() / 1024L / 1024L / 1024L));
|
|
|
memory.put("usedPerc", getDouble(mem.getUsedPercent() / 1024L / 1024L / 1024L));
|
|
|
//交换区
|
|
|
memory.put("swapTotal",swap.getTotal() / 1024L / 1024L / 1024L);
|
|
|
memory.put("swapUsed",swap.getUsed() / 1024L / 1024L / 1024L);
|
|
|
memory.put("swapFree",swap.getFree() / 1024L / 1024L / 1024L);
|
|
|
memory.put("swapTotal", getDouble((double)swap.getTotal() / 1024L / 1024L / 1024L));
|
|
|
memory.put("swapUsed", getDouble((double)swap.getUsed() / 1024L / 1024L / 1024L));
|
|
|
memory.put("swapFree", getDouble((double) swap.getFree() / 1024L / 1024L / 1024L));
|
|
|
return memory;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* cpu使用情况
|
|
|
*
|
|
|
* @return
|
|
|
* @throws SigarException
|
|
|
*/
|
|
|
public static Map<String,Object> cpu() throws SigarException {
|
|
|
Map<String,Object> cpuMap = new HashMap<>();
|
|
|
public static Map<String, Object> cpu() throws SigarException {
|
|
|
Map<String, Object> cpuMap = new HashMap<>();
|
|
|
CpuInfo infos[] = sigar.getCpuInfoList();
|
|
|
CpuPerc cpuPerc = sigar.getCpuPerc();
|
|
|
CpuPerc cpuPerc = sigar.getCpuPerc();
|
|
|
CpuInfo info1 = infos[0];
|
|
|
//cpu信息
|
|
|
cpuMap.put("quantity",infos.length);
|
|
|
cpuMap.put("model",info1.getModel());
|
|
|
cpuMap.put("totalCores",info1.getTotalCores());
|
|
|
cpuMap.put("totalSockets",info1.getTotalSockets());
|
|
|
cpuMap.put("Mhz",info1.getMhz());
|
|
|
cpuMap.put("quantity", infos.length);
|
|
|
cpuMap.put("model", info1.getModel());
|
|
|
cpuMap.put("totalCores", info1.getTotalCores());
|
|
|
cpuMap.put("totalSockets", info1.getTotalSockets());
|
|
|
cpuMap.put("Mhz", info1.getMhz());
|
|
|
//cpu使用率
|
|
|
|
|
|
String totalPerc = String.format("%.2f", cpuPerc.getCombined() * 100);
|
|
@ -161,12 +167,12 @@ public class SigarUtil {
|
|
|
String nice = String.format("%.2f", cpuPerc.getNice() * 100);
|
|
|
String freePerc = String.format("%.2f", cpuPerc.getIdle() * 100);
|
|
|
|
|
|
cpuMap.put("totalPerc",Double.parseDouble(totalPerc));
|
|
|
cpuMap.put("userPerc",Double.parseDouble(userPerc));
|
|
|
cpuMap.put("sysPerc",Double.parseDouble(sysPerc));
|
|
|
cpuMap.put("wait",Double.parseDouble(wait));
|
|
|
cpuMap.put("nice",Double.parseDouble(nice));
|
|
|
cpuMap.put("freePerc",Double.parseDouble(freePerc));
|
|
|
cpuMap.put("totalPerc", getDouble(cpuPerc.getCombined() * 100));
|
|
|
cpuMap.put("userPerc", getDouble(cpuPerc.getUser() * 100));
|
|
|
cpuMap.put("sysPerc", getDouble(cpuPerc.getSys() * 100));
|
|
|
cpuMap.put("wait", getDouble(cpuPerc.getWait() * 100));
|
|
|
cpuMap.put("nice", getDouble(cpuPerc.getNice() * 100));
|
|
|
cpuMap.put("freePerc", getDouble(cpuPerc.getIdle() * 100));
|
|
|
return cpuMap;
|
|
|
}
|
|
|
|
|
@ -215,51 +221,51 @@ public class SigarUtil {
|
|
|
/**
|
|
|
* 硬盘信息
|
|
|
*/
|
|
|
public static List<Map<String,Object>> file() {
|
|
|
List<Map<String,Object>> files = new ArrayList<>();
|
|
|
Map<String,Object> fileMap = null;
|
|
|
public static List<Map<String, Object>> file() {
|
|
|
List<Map<String, Object>> files = new ArrayList<>();
|
|
|
Map<String, Object> fileMap = null;
|
|
|
FileSystem fslist[] = new FileSystem[0];
|
|
|
try {
|
|
|
fslist = sigar.getFileSystemList();
|
|
|
for (int i = 0; i < fslist.length; i++) {
|
|
|
FileSystem fs = fslist[i];
|
|
|
fileMap = new HashMap<>();
|
|
|
for (int i = 0; i < fslist.length; i++) {
|
|
|
FileSystem fs = fslist[i];
|
|
|
fileMap = new HashMap<>();
|
|
|
|
|
|
switch (fs.getType()) {
|
|
|
case 0: // TYPE_UNKNOWN :未知
|
|
|
break;
|
|
|
case 1: // TYPE_NONE
|
|
|
break;
|
|
|
case 2: // TYPE_LOCAL_DISK : 本地硬盘
|
|
|
FileSystemUsage usage = sigar.getFileSystemUsage(fs.getDirName());
|
|
|
fileMap.put("devName",fs.getDevName());
|
|
|
fileMap.put("dirName",fs.getDirName());
|
|
|
fileMap.put("flags",fs.getFlags());
|
|
|
fileMap.put("sysTypeName",fs.getSysTypeName());
|
|
|
fileMap.put("typeName",fs.getTypeName());
|
|
|
fileMap.put("type",fs.getType());
|
|
|
switch (fs.getType()) {
|
|
|
case 0: // TYPE_UNKNOWN :未知
|
|
|
break;
|
|
|
case 1: // TYPE_NONE
|
|
|
break;
|
|
|
case 2: // TYPE_LOCAL_DISK : 本地硬盘
|
|
|
FileSystemUsage usage = sigar.getFileSystemUsage(fs.getDirName());
|
|
|
fileMap.put("devName", fs.getDevName());
|
|
|
fileMap.put("dirName", fs.getDirName());
|
|
|
fileMap.put("flags", fs.getFlags());
|
|
|
fileMap.put("sysTypeName", fs.getSysTypeName());
|
|
|
fileMap.put("typeName", fs.getTypeName());
|
|
|
fileMap.put("type", fs.getType());
|
|
|
|
|
|
fileMap.put("total",usage.getTotal() / 1024L / 1024L);
|
|
|
fileMap.put("free",usage.getFree() / 1024L / 1024L );
|
|
|
fileMap.put("aVall",usage.getAvail() / 1024L / 1024L );//可用大小
|
|
|
fileMap.put("used",usage.getUsed() / 1024L / 1024L );
|
|
|
fileMap.put("usePercent", usage.getUsePercent() * 100D );
|
|
|
fileMap.put("total", usage.getTotal() / 1024L / 1024L);
|
|
|
fileMap.put("free", usage.getFree() / 1024L / 1024L);
|
|
|
fileMap.put("aVall", usage.getAvail() / 1024L / 1024L);//可用大小
|
|
|
fileMap.put("used", usage.getUsed() / 1024L / 1024L);
|
|
|
fileMap.put("usePercent", usage.getUsePercent() * 100D);
|
|
|
|
|
|
fileMap.put("diskRead", usage.getDiskReads() );
|
|
|
fileMap.put("diskWrite", usage.getDiskWrites() );
|
|
|
files.add(fileMap);
|
|
|
break;
|
|
|
case 3:// TYPE_NETWORK :网络
|
|
|
break;
|
|
|
case 4:// TYPE_RAM_DISK :闪存
|
|
|
break;
|
|
|
case 5:// TYPE_CDROM :光驱
|
|
|
break;
|
|
|
case 6:// TYPE_SWAP :页面交换
|
|
|
break;
|
|
|
}
|
|
|
fileMap.put("diskRead", usage.getDiskReads());
|
|
|
fileMap.put("diskWrite", usage.getDiskWrites());
|
|
|
files.add(fileMap);
|
|
|
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();
|
|
|
}
|
|
@ -268,24 +274,29 @@ public class SigarUtil {
|
|
|
|
|
|
/**
|
|
|
* 网络信息
|
|
|
*
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public static Map<String,Object> net() throws Exception {
|
|
|
List<Map<String,Object>> netList = new ArrayList<>();
|
|
|
Map<String,Object> netMap = new HashMap<>();
|
|
|
NetInterfaceConfig netConfig = sigar.getNetInterfaceConfig();
|
|
|
NetInterfaceStat netIfStat = sigar.getNetInterfaceStat(netConfig.getName());
|
|
|
Map<String,Object> bps = populate(netConfig.getName());//bps
|
|
|
netMap.put("address",netConfig.getAddress());
|
|
|
netMap.put("broadcast",netConfig.getBroadcast());
|
|
|
netMap.put("netmask",netConfig.getNetmask());
|
|
|
netMap.put("rxPackets",netIfStat.getRxPackets());
|
|
|
netMap.put("txPackets",netIfStat.getTxPackets());
|
|
|
netMap.put("rxBytes",netIfStat.getRxBytes());
|
|
|
netMap.put("txBytes",netIfStat.getTxBytes());
|
|
|
netMap.put("txPackets",netIfStat.getTxPackets());
|
|
|
netMap.put("txbps",bps.get("txbps"));
|
|
|
netMap.put("rxbps",bps.get("rxbps"));
|
|
|
public static Map<String, Object> net() {
|
|
|
Map<String, Object> netMap = new HashMap<>();
|
|
|
NetInterfaceConfig netConfig = null;
|
|
|
try {
|
|
|
netConfig = sigar.getNetInterfaceConfig();
|
|
|
NetInterfaceStat netIfStat = sigar.getNetInterfaceStat(netConfig.getName());
|
|
|
Map<String, Object> bps = populate(netConfig.getName());//bps
|
|
|
netMap.put("address", netConfig.getAddress());
|
|
|
netMap.put("broadcast", netConfig.getBroadcast());
|
|
|
netMap.put("netmask", netConfig.getNetmask());
|
|
|
netMap.put("rxPackets", netIfStat.getRxPackets());
|
|
|
netMap.put("txPackets", netIfStat.getTxPackets());
|
|
|
netMap.put("rxBytes", netIfStat.getRxBytes());
|
|
|
netMap.put("txBytes", netIfStat.getTxBytes());
|
|
|
netMap.put("txPackets", netIfStat.getTxPackets());
|
|
|
netMap.put("txbps", bps.get("txbps"));
|
|
|
netMap.put("rxbps", bps.get("rxbps"));
|
|
|
} catch (SigarException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
return netMap;
|
|
|
}
|
|
|
|
|
@ -305,17 +316,18 @@ public class SigarUtil {
|
|
|
System.out.println(cfg.getName() + "网卡类型" + cfg.getType());//
|
|
|
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 網絡傳輸速率 bps
|
|
|
*
|
|
|
* @param name
|
|
|
* @throws SigarException
|
|
|
*/
|
|
|
public static Map<String,Object> populate(String name)
|
|
|
public static Map<String, Object> populate(String name)
|
|
|
throws SigarException {
|
|
|
Map<String,Object> bps = new HashMap<>();
|
|
|
Map<String, Object> bps = new HashMap<>();
|
|
|
try {
|
|
|
long start = System.currentTimeMillis();
|
|
|
NetInterfaceStat statStart = sigar.getNetInterfaceStat(name);
|
|
@ -326,15 +338,25 @@ public class SigarUtil {
|
|
|
NetInterfaceStat statEnd = sigar.getNetInterfaceStat(name);
|
|
|
long rxBytesEnd = statEnd.getRxBytes();
|
|
|
long txBytesEnd = statEnd.getTxBytes();
|
|
|
long rxbps = ((rxBytesEnd - rxBytesStart)*8/1024) / ((end-start)/1000);
|
|
|
long txbps = ((txBytesEnd - txBytesStart)*8/1024) / ((end-start)/1000);
|
|
|
bps.put("rxbps",rxbps);
|
|
|
bps.put("txbps",txbps);
|
|
|
System.out.println("#######rxbps: "+rxbps +" txbps: "+txbps);
|
|
|
long rxbps = ((rxBytesEnd - rxBytesStart) * 8 / 1024) / ((end - start) / 1000);
|
|
|
long txbps = ((txBytesEnd - txBytesStart) * 8 / 1024) / ((end - start) / 1000);
|
|
|
bps.put("rxbps", rxbps);
|
|
|
bps.put("txbps", txbps);
|
|
|
System.out.println("#######rxbps: " + rxbps + " txbps: " + txbps);
|
|
|
} catch (SigarException e) {
|
|
|
} catch (Exception e) {
|
|
|
}
|
|
|
return bps;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取两位小数的double值
|
|
|
* @param value
|
|
|
* @return
|
|
|
*/
|
|
|
public static double getDouble(double value){
|
|
|
String total = String.format("%.2f", value );
|
|
|
return Double.parseDouble(total);
|
|
|
}
|
|
|
|
|
|
}
|