Details
diff --git a/azkaban-common/src/main/java/azkaban/utils/SystemMemoryInfo.java b/azkaban-common/src/main/java/azkaban/utils/SystemMemoryInfo.java
index 144530c..f6382bc 100644
--- a/azkaban-common/src/main/java/azkaban/utils/SystemMemoryInfo.java
+++ b/azkaban-common/src/main/java/azkaban/utils/SystemMemoryInfo.java
@@ -31,7 +31,7 @@ public class SystemMemoryInfo {
private static ScheduledExecutorService scheduledExecutorService;
- public static void init() {
+ public static void init(int memCheckInterval) {
File f = new File(MEMINFO_FILE);
memCheckEnabled = f.exists() && !f.isDirectory();
if (memCheckEnabled) {
@@ -39,9 +39,9 @@ public class SystemMemoryInfo {
readMemoryInfoFile();
//schedule a thread to read it
- logger.info("Scheduled thread to read /proc/meminfo every 30 seconds");
+ logger.info(String.format("Scheduled thread to read /proc/meminfo every %d seconds", memCheckInterval));
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
- scheduledExecutorService.scheduleAtFixedRate(new MemoryInfoReader(), 0, 30, TimeUnit.SECONDS);
+ scheduledExecutorService.scheduleAtFixedRate(new MemoryInfoReader(), 0, memCheckInterval, TimeUnit.SECONDS);
}
}
diff --git a/azkaban-common/src/test/java/azkaban/utils/MemUtilsTest.java b/azkaban-common/src/test/java/azkaban/utils/MemUtilsTest.java
new file mode 100644
index 0000000..68e7235
--- /dev/null
+++ b/azkaban-common/src/test/java/azkaban/utils/MemUtilsTest.java
@@ -0,0 +1,51 @@
+package azkaban.utils;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class MemUtilsTest {
+ @Test
+ public void testConversion() {
+ Assert.assertEquals(Utils.parseMemString("1024"), 1L);
+ Assert.assertEquals(Utils.parseMemString("1K"), 1L);
+ Assert.assertEquals(Utils.parseMemString("1M"), 1024L);
+ Assert.assertEquals(Utils.parseMemString("1G"), 1024L * 1024L);
+
+ Assert.assertEquals(Utils.parseMemString("1k"), 1L);
+ Assert.assertEquals(Utils.parseMemString("1m"), 1024L);
+ Assert.assertEquals(Utils.parseMemString("1g"), 1024L * 1024L);
+
+ Assert.assertEquals(Utils.parseMemString("5000"), 4L);
+ Assert.assertEquals(Utils.parseMemString("1024K"), 1024L);
+ Assert.assertEquals(Utils.parseMemString("512M"), 512 * 1024L);
+ Assert.assertEquals(Utils.parseMemString("2G"), 2L * 1024L * 1024L);
+ }
+
+ @Test
+ public void testBadFormat() {
+ badFormatHelper("1KB");
+ badFormatHelper("1MB");
+ badFormatHelper("1GB");
+
+ badFormatHelper("1kb");
+ badFormatHelper("1mb");
+ badFormatHelper("1gb");
+
+ badFormatHelper("100.5K");
+ badFormatHelper("512.8M");
+ badFormatHelper("0.5G");
+
+ badFormatHelper("100b");
+ badFormatHelper("100f");
+ badFormatHelper("100abcdc");
+ }
+
+ private void badFormatHelper(String str) {
+ try {
+ Utils.parseMemString(str);
+ Assert.fail("should get a runtime exception");
+ } catch (Exception e) {
+ Assert.assertEquals(e instanceof NumberFormatException, true);
+ }
+ }
+}
diff --git a/azkaban-execserver/src/main/java/azkaban/execapp/AzkabanExecutorServer.java b/azkaban-execserver/src/main/java/azkaban/execapp/AzkabanExecutorServer.java
index 80d2554..d9a4bc0 100644
--- a/azkaban-execserver/src/main/java/azkaban/execapp/AzkabanExecutorServer.java
+++ b/azkaban-execserver/src/main/java/azkaban/execapp/AzkabanExecutorServer.java
@@ -125,7 +125,7 @@ public class AzkabanExecutorServer {
configureMBeanServer();
configureMetricReports();
- SystemMemoryInfo.init();
+ SystemMemoryInfo.init(props.getInt("executor.memCheck.interval", 30));
try {
server.start();