From 6eb7e18a6da717e4c9a5a80cce3d29de51246318 Mon Sep 17 00:00:00 2001 From: walt Date: Thu, 9 Feb 2017 14:55:45 +0800 Subject: [PATCH 1/3] getMemAvailable --- .../jstorm/daemon/supervisor/Heartbeat.java | 2 +- .../java/com/alibaba/jstorm/utils/JStormUtils.java | 4 ++++ .../com/alibaba/jstorm/utils/LinuxResource.java | 14 +++++++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/jstorm-core/src/main/java/com/alibaba/jstorm/daemon/supervisor/Heartbeat.java b/jstorm-core/src/main/java/com/alibaba/jstorm/daemon/supervisor/Heartbeat.java index 9a8572f5e..e00d7b434 100644 --- a/jstorm-core/src/main/java/com/alibaba/jstorm/daemon/supervisor/Heartbeat.java +++ b/jstorm-core/src/main/java/com/alibaba/jstorm/daemon/supervisor/Heartbeat.java @@ -202,7 +202,7 @@ private List calculatorAvailablePorts() { if (cpuUsage <= 0.0 || !ConfigExtension.isSupervisorEnableAutoAdjustSlots(conf)) { return defaultPortList; } - long freeMemory = JStormUtils.getFreePhysicalMem() * 1024L; + long freeMemory = JStormUtils.getAvailablePhysicalMem() * 1024L; long reserveMemory = ConfigExtension.getStormMachineReserveMem(conf); diff --git a/jstorm-core/src/main/java/com/alibaba/jstorm/utils/JStormUtils.java b/jstorm-core/src/main/java/com/alibaba/jstorm/utils/JStormUtils.java index fbde4ae25..5d4ffb1c6 100644 --- a/jstorm-core/src/main/java/com/alibaba/jstorm/utils/JStormUtils.java +++ b/jstorm-core/src/main/java/com/alibaba/jstorm/utils/JStormUtils.java @@ -518,6 +518,10 @@ public static Long getFreePhysicalMem() { return LinuxResource.getFreePhysicalMem(); } + public static Long getAvailablePhysicalMem() { + return LinuxResource.getAvailablePhysicalMem(); + } + public static int getNumProcessors() { return LinuxResource.getProcessNum(); } diff --git a/jstorm-core/src/main/java/com/alibaba/jstorm/utils/LinuxResource.java b/jstorm-core/src/main/java/com/alibaba/jstorm/utils/LinuxResource.java index 36f20b713..38c402700 100644 --- a/jstorm-core/src/main/java/com/alibaba/jstorm/utils/LinuxResource.java +++ b/jstorm-core/src/main/java/com/alibaba/jstorm/utils/LinuxResource.java @@ -185,7 +185,19 @@ public static Long getFreePhysicalMem() { } return 0L; } - + public static Long getAvailablePhysicalMem() { + if (!OSInfo.isLinux()) { + return 0L; + } + try { + List lines = IOUtils.readLines(new FileInputStream(PROCFS_MEMINFO)); + String free = lines.get(2).split("\\s+")[1]; + return Long.valueOf(free); + } catch (Exception ignored) { + LOG.warn("failed to get total free memory."); + } + return 0L; + } /** * calcute the disk usage at current filesystem * @return From 3e515df6a3568768c63f4565503cb45e06e2e379 Mon Sep 17 00:00:00 2001 From: walt Date: Fri, 10 Feb 2017 16:59:47 +0800 Subject: [PATCH 2/3] using_available_mem_and_forward_compatibility_free_mem --- .../main/java/com/alibaba/jstorm/utils/LinuxResource.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/jstorm-core/src/main/java/com/alibaba/jstorm/utils/LinuxResource.java b/jstorm-core/src/main/java/com/alibaba/jstorm/utils/LinuxResource.java index 38c402700..6aa600b38 100644 --- a/jstorm-core/src/main/java/com/alibaba/jstorm/utils/LinuxResource.java +++ b/jstorm-core/src/main/java/com/alibaba/jstorm/utils/LinuxResource.java @@ -26,6 +26,7 @@ public class LinuxResource { private static final Pattern CPU_TIME_FORMAT = Pattern.compile("^cpu[ \t]+([0-9]+)[ \t]+([0-9]+)[ \t]+([0-9]+)"); private static final String PROCFS_MEMINFO = "/proc/meminfo"; + private static final String MEMINFO_MEMAVAILABLE = "MemAvailable"; public static final long JIFFY_LENGTH_IN_MILLIS; static { long jiffiesPerSecond = getJiffies(); @@ -190,8 +191,13 @@ public static Long getAvailablePhysicalMem() { return 0L; } try { + List lines = IOUtils.readLines(new FileInputStream(PROCFS_MEMINFO)); String free = lines.get(2).split("\\s+")[1]; + String name = lines.get(2).split(":")[0].trim(); + if( ! MEMINFO_MEMAVAILABLE.equals(name) ){ + free = lines.get(1).split("\\s+")[1]; + } return Long.valueOf(free); } catch (Exception ignored) { LOG.warn("failed to get total free memory."); From 5e720d56110a3a807ba2f0a10b0a4b3261ccdc63 Mon Sep 17 00:00:00 2001 From: walt Date: Fri, 10 Feb 2017 18:52:01 +0800 Subject: [PATCH 3/3] using_String_index_of --- .../src/main/java/com/alibaba/jstorm/utils/LinuxResource.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jstorm-core/src/main/java/com/alibaba/jstorm/utils/LinuxResource.java b/jstorm-core/src/main/java/com/alibaba/jstorm/utils/LinuxResource.java index 6aa600b38..f118d00bb 100644 --- a/jstorm-core/src/main/java/com/alibaba/jstorm/utils/LinuxResource.java +++ b/jstorm-core/src/main/java/com/alibaba/jstorm/utils/LinuxResource.java @@ -5,6 +5,7 @@ import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -194,8 +195,7 @@ public static Long getAvailablePhysicalMem() { List lines = IOUtils.readLines(new FileInputStream(PROCFS_MEMINFO)); String free = lines.get(2).split("\\s+")[1]; - String name = lines.get(2).split(":")[0].trim(); - if( ! MEMINFO_MEMAVAILABLE.equals(name) ){ + if( StringUtils.indexOfIgnoreCase(lines.get(2), MEMINFO_MEMAVAILABLE) < 0 ){ free = lines.get(1).split("\\s+")[1]; } return Long.valueOf(free);