You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ud...@apache.org on 2014/08/19 12:52:00 UTC

[09/14] git commit: Considering cached memory when calculating average memory consumption

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/master
Commit: bd3715d365266c640b3b3e52eee748626fa03e9c
Parents: 662f14d
Author: Udara Liyanage <ud...@wso2.com>
Authored: Mon Aug 18 14:53:57 2014 +0530
Committer: Udara Liyanage <ud...@wso2.com>
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