赞
踩
先上代码,保证这是目前全网最简单的获取系统CPU占用率、内存占用率的方法
- @Test
- public void testSystemUsage() {
- final long GB = 1024 * 1024 * 1024;
- while (true) {
- OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();
- String osJson = JSON.toJSONString(operatingSystemMXBean);
- // System.out.println("osJson is " + osJson);
- JSONObject jsonObject = JSON.parseObject(osJson);
- double processCpuLoad = jsonObject.getDouble("processCpuLoad") * 100;
- double systemCpuLoad = jsonObject.getDouble("systemCpuLoad") * 100;
- Long totalPhysicalMemorySize = jsonObject.getLong("totalPhysicalMemorySize");
- Long freePhysicalMemorySize = jsonObject.getLong("freePhysicalMemorySize");
- double totalMemory = 1.0 * totalPhysicalMemorySize / GB;
- double freeMemory = 1.0 * freePhysicalMemorySize / GB;
- double memoryUseRatio = 1.0 * (totalPhysicalMemorySize - freePhysicalMemorySize) / totalPhysicalMemorySize * 100;
-
- StringBuilder result = new StringBuilder();
- result.append("系统CPU占用率: ")
- .append(twoDecimal(systemCpuLoad))
- .append("%,内存占用率:")
- .append(twoDecimal(memoryUseRatio))
- .append("%,系统总内存:")
- .append(twoDecimal(totalMemory))
- .append("GB,系统剩余内存:")
- .append(twoDecimal(freeMemory))
- .append("GB,该进程占用CPU:")
- .append(twoDecimal(processCpuLoad))
- .append("%");
- System.out.println(result.toString());
-
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
-
- public double twoDecimal(double doubleValue) {
- BigDecimal bigDecimal = new BigDecimal(doubleValue).setScale(2, RoundingMode.HALF_UP);
- return bigDecimal.doubleValue();
- }
这代码我注释都懒得写一行了,主要是这一行:JSON.toJSONString(operatingSystemMXBean),输出的结果如图:(使用的是阿里巴巴的fastjson)
我当时只是为了偷懒一个个去get输出,就直接通过JSON的方式打印输出了,结果不输出不知道,一输出吓一跳,把一堆隐藏字段都给输出出来了,包括systemCpuLoad、processCpuLoad,这两个字段一个就是系统CPU总的利用率,另一个应该是这个Java进程当前的CPU利用率,这样就省去很多事了,直接通过JSONObject取出来就是了,直接就给输出出来了。
其中:OperatingSystemMXBean这个类是JDK自带的,不用引入任何第三方jar包
输出最终结果如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。