Long getPhysicalMemorySizeMB()

in src/jetbrains/buildserver/agentInfo/AgentSystemInfo.java [88:113]


  Long getPhysicalMemorySizeMB() {
    try {
      final OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();
      if (operatingSystemMXBean instanceof com.sun.management.OperatingSystemMXBean) {
        com.sun.management.OperatingSystemMXBean sunBean = ((com.sun.management.OperatingSystemMXBean)operatingSystemMXBean);

        long myPhysicalMemoryInMb = sunBean.getTotalPhysicalMemorySize() / MB;
        if (myPhysicalMemoryInMb > 0) {
          return myPhysicalMemoryInMb;
        }
      }
    } catch (Throwable e) {
      LOG.info("Class 'com.sun.management.OperatingSystemMXBean' not found or another error, using alternative way to get total memory. Error encountered: " + e.toString());
      try {
        MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
        Object attribute = mBeanServer.getAttribute(new ObjectName("java.lang","type","OperatingSystem"), "TotalPhysicalMemorySize");
        long myPhysicalMemoryInMb = (Long)attribute / MB;
        if (myPhysicalMemoryInMb > 0) {
          return myPhysicalMemoryInMb;
        }
      } catch (Throwable e1) {
        LOG.warn("Failed to get total memory size: " + e1.toString());
      }
    }
    return null;
  }