diff --git a/azkaban-execserver/src/main/java/azkaban/execapp/ServerStatisticsServlet.java b/azkaban-execserver/src/main/java/azkaban/execapp/ServerStatisticsServlet.java
index c844cbf..e7725e4 100644
--- a/azkaban-execserver/src/main/java/azkaban/execapp/ServerStatisticsServlet.java
+++ b/azkaban-execserver/src/main/java/azkaban/execapp/ServerStatisticsServlet.java
@@ -73,7 +73,7 @@ public class ServerStatisticsServlet extends HttpServlet {
&& new File("/bin/grep").exists()
&& new File("/proc/meminfo").exists()) {
java.lang.ProcessBuilder processBuilder =
- new java.lang.ProcessBuilder("/bin/bash", "-c", "/bin/cat /proc/meminfo | grep -E \"MemTotal|MemFree\"");
+ new java.lang.ProcessBuilder("/bin/bash", "-c", "/bin/cat /proc/meminfo | grep -E \"MemTotal|MemFree|Buffers|Cached|SwapCached\"");
try {
ArrayList<String> output = new ArrayList<String>();
Process process = processBuilder.start();
@@ -91,30 +91,70 @@ public class ServerStatisticsServlet extends HttpServlet {
}
long totalMemory = 0;
- long freeMemory = 0;
+ long totalFreeMemory = 0;
+ long parsedResult = 0;
// process the output from bash call.
// we expect the result from the bash call to be something like following -
// MemTotal: 65894264 kB
- // MemFree: 61104076 kB
- if (output.size() == 2) {
+ // MemFree: 57753844 kB
+ // Buffers: 305552 kB
+ // Cached: 3802432 kB
+ // SwapCached: 0 kB
+ // Note : total free memory = freeMemory + cached + buffers + swapCached
+ if (output.size() == 5) {
for (String result : output){
// find the total memory and value the variable.
if (result.contains("MemTotal") && result.split("\\s+").length > 2){
try {
totalMemory = Long.parseLong(result.split("\\s+")[1]);
- logger.info("Total memory : " + totalMemory);
+ logger.debug("Total memory : " + totalMemory);
}catch(NumberFormatException e){
logger.error("yielding 0 for total memory as output is invalid -" + result);
}
}
- // find the free memory and value the variable.
+
+ // find the free memory.
if (result.contains("MemFree") && result.split("\\s+").length > 2){
try {
- freeMemory = Long.parseLong(result.split("\\s+")[1]);
- logger.info("Free memory : " + freeMemory);
+ parsedResult = Long.parseLong(result.split("\\s+")[1]);
+ logger.debug("Free memory : " + parsedResult);
+ totalFreeMemory += parsedResult;
}catch(NumberFormatException e){
- logger.error("yielding 0 for total memory as output is invalid -" + result);
+ logger.error("yielding 0 for free memory as output is invalid -" + result);
+ }
+ }
+
+ // find the Buffers.
+ if (result.contains("Buffers") && result.split("\\s+").length > 2){
+ try {
+ parsedResult = Long.parseLong(result.split("\\s+")[1]);
+ logger.debug("Buffers : " + parsedResult);
+ totalFreeMemory += parsedResult;
+ }catch(NumberFormatException e){
+ logger.error("yielding 0 for Buffers as output is invalid -" + result);
+ }
+ }
+
+ // find the Cached.
+ if (result.contains("Cached") && result.split("\\s+").length > 2){
+ try {
+ parsedResult = Long.parseLong(result.split("\\s+")[1]);
+ logger.debug("Cached : " + parsedResult);
+ totalFreeMemory += parsedResult;
+ }catch(NumberFormatException e){
+ logger.error("yielding 0 for Cached as output is invalid -" + result);
+ }
+ }
+
+ // find the SwapCached.
+ if (result.contains("SwapCached") && result.split("\\s+").length > 2){
+ try {
+ parsedResult = Long.parseLong(result.split("\\s+")[1]);
+ logger.debug("SwapCached : " + parsedResult);
+ totalFreeMemory += parsedResult;
+ }catch(NumberFormatException e){
+ logger.error("yielding 0 for SwapCached as output is invalid -" + result);
}
}
}
@@ -122,9 +162,9 @@ public class ServerStatisticsServlet extends HttpServlet {
logger.error("failed to get total/free memory info as the bash call returned invalid result.");
}
- // the number got from the proc file is in KBs we want to see the number in MBs so we are deviding it by 1024.
- stats.setRemainingMemoryInMB(freeMemory/1024);
- stats.setRemainingMemoryPercent(totalMemory == 0 ? 0 : ((double)freeMemory / (double)totalMemory)*100);
+ // the number got from the proc file is in KBs we want to see the number in MBs so we are dividing it by 1024.
+ stats.setRemainingMemoryInMB(totalFreeMemory/1024);
+ stats.setRemainingMemoryPercent(totalMemory == 0 ? 0 : ((double)totalFreeMemory / (double)totalMemory)*100);
}
catch (Exception ex){
logger.error("failed fetch system memory info " +