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

Reply via email to