Considering cached memory when calculating average memory consumption
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/bd3715d3 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/bd3715d3 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/bd3715d3 Branch: refs/heads/4.0.0-grouping Commit: bd3715d365266c640b3b3e52eee748626fa03e9c Parents: 662f14d Author: Udara Liyanage <[email protected]> Authored: Mon Aug 18 14:53:57 2014 +0530 Committer: Udara Liyanage <[email protected]> Committed: Mon Aug 18 14:53:57 2014 +0530 ---------------------------------------------------------------------- .../publisher/HealthStatisticsReader.java | 47 ++++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/bd3715d3/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/statistics/publisher/HealthStatisticsReader.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/statistics/publisher/HealthStatisticsReader.java b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/statistics/publisher/HealthStatisticsReader.java index b986191..9a56043 100644 --- a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/statistics/publisher/HealthStatisticsReader.java +++ b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/statistics/publisher/HealthStatisticsReader.java @@ -20,12 +20,16 @@ package org.apache.stratos.cartridge.agent.statistics.publisher; import com.sun.management.OperatingSystemMXBean; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.cartridge.agent.config.CartridgeAgentConfiguration; import org.apache.stratos.cartridge.agent.util.CartridgeAgentUtils; +import java.io.FileInputStream; +import java.io.IOException; import java.lang.management.ManagementFactory; +import java.util.Scanner; /** * Health statistics reader. @@ -35,9 +39,41 @@ public class HealthStatisticsReader { private static final Log log = LogFactory.getLog(HealthStatisticsReader.class); public static double getMemoryConsumption() { - OperatingSystemMXBean osBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); - double totalMemory = (double)(osBean.getTotalPhysicalMemorySize()/ MB); - double usedMemory = (double)((totalMemory - (osBean.getFreePhysicalMemorySize() / MB) )); + double totalMemory = 0, usedMemory = 0; + + if (isWindows()) { + OperatingSystemMXBean osBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); + totalMemory = (double)(osBean.getTotalPhysicalMemorySize()/ MB); + usedMemory = (double)((totalMemory - (osBean.getFreePhysicalMemorySize() / MB) )); + } else { + String fName = "/proc/meminfo"; + try { + FileInputStream f = new FileInputStream(fName); + + /* $ cat /proc/meminfo + * MemTotal: 2056964 kB + * MemFree: 16716 kB + * Buffers: 9776 kB + * Cached: 127220 kB + */ + Scanner scanner = new Scanner(f).useDelimiter("\\D+"); + try { + long memTotal = scanner.nextLong(); + long memFree = scanner.nextLong(); + long buffers = scanner.nextLong(); + long cached = scanner.nextLong(); + + totalMemory = memTotal; + usedMemory = memTotal - (memFree + buffers + cached); + } catch (Exception ex) { + log.error("Could not calculate memory usage.", ex); + } finally { + scanner.close(); + } + } catch (IOException ex) { + log.error("Could not calculate memory usage.", ex); + } + } if(log.isDebugEnabled()) { log.debug("Calculating memory consumption: [totalMemory] "+totalMemory+" [usedMemory] "+usedMemory); @@ -69,4 +105,9 @@ public class HealthStatisticsReader { return CartridgeAgentUtils.checkPortsActive(CartridgeAgentConfiguration.getInstance().getListenAddress(), CartridgeAgentConfiguration.getInstance().getPorts()); } + + private static boolean isWindows() { + String os = System.getProperty("os.name").toLowerCase(); + return os.indexOf("win") >= 0; + } } \ No newline at end of file
