得到Linux 和 Window 内存使用率!

得到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;
	}
	

🆗,自己参考一下!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值