得到Linux 和 Window 内存使用率!
核心代码:
private static String osName = System.getProperty("os.name");
/**
* 得到Linux 和 Window 内存使用率
* */
public static double getMemUsage() {
if (osName.toLowerCase().contains("windows")
|| osName.toLowerCase().contains("win")) {
logger.info("windows查询内存使用率");
try {
OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory
.getOperatingSystemMXBean();
// 总的物理内存+虚拟内存
long totalvirtualMemory = osmxb.getTotalSwapSpaceSize();
// 剩余的物理内存
long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize();
Double usage = (Double) (1 - freePhysicalMemorySize * 1.0
/ totalvirtualMemory) * 100;
BigDecimal b1 = new BigDecimal(usage);
double memoryUsage = b1.setScale(2, BigDecimal.ROUND_HALF_UP)
.doubleValue();
/*double result2 = b1.setScale(2, RoundingMode.HALF_UP).doubleValue();//可以替换上面的过时方法,进行四舍五入,保留两位小数。
*/ return memoryUsage;
} catch (Exception e) {
logger.info("" + e);
}
} else {
logger.info("linux查询内存使用率");
Map<String, Object> map = new HashMap<String, Object>();
InputStreamReader inputs = null;
BufferedReader buffer = null;
try {
inputs = new InputStreamReader(new FileInputStream(
"/proc/meminfo"));//执行Linux指令(cat /proc/meminfo))
buffer = new BufferedReader(inputs);
String line = "";
while (true) {
line = buffer.readLine();
if (line == null)
break;
int beginIndex = 0;
int endIndex = line.indexOf(":");//返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
if (endIndex != -1) {
String key = line.substring(beginIndex, endIndex);
beginIndex = endIndex + 1;
endIndex = line.length();
String memory = line.substring(beginIndex, endIndex);
String value = memory.replace("kB", "").trim();//去掉字符串两端空格,并替换KB
map.put(key, value);
}
}
long memTotal = Long.parseLong(map.get("MemTotal").toString());//所有可用RAM大小
long memFree = Long.parseLong(map.get("MemFree").toString());//被系统留着未使用的内存
long memused = memTotal - memFree;
long buffers = Long.parseLong(map.get("Buffers").toString());//用来给文件做缓冲大小
long cached = Long.parseLong(map.get("Cached").toString());//被高速缓冲存储器(cache memory)用的内存的大小
double usage = (double) (memused - buffers - cached) / memTotal
* 100;
BigDecimal b1 = new BigDecimal(usage);
double memoryUsage = b1.setScale(2, BigDecimal.ROUND_HALF_UP)
.doubleValue();
return memoryUsage;
} catch (Exception e) {
logger.info("" + e);
} finally {
try {
buffer.close();
inputs.close();
} catch (Exception e2) {
logger.info("" + e2);
}
}
}
return 0.0;
}
🆗,自己参考一下!