You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2019/04/19 05:39:04 UTC
[incubator-iotdb] branch refactor_mem_controller updated: record
memory usage even in dangerous level
This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch refactor_mem_controller
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
The following commit(s) were added to refs/heads/refactor_mem_controller by this push:
new 12d9641 record memory usage even in dangerous level
12d9641 is described below
commit 12d96417e006e143b85c6296d77665727abd8cce
Author: 江天 <jt...@163.com>
AuthorDate: Fri Apr 19 13:36:04 2019 +0800
record memory usage even in dangerous level
---
.../db/engine/filenode/FileNodeProcessor.java | 1 +
.../db/engine/memcontrol/RecordMemController.java | 54 ++++++++--------------
2 files changed, 21 insertions(+), 34 deletions(-)
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeProcessor.java b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeProcessor.java
index 47aca8e..98cd121 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeProcessor.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeProcessor.java
@@ -1525,6 +1525,7 @@ public class FileNodeProcessor extends Processor implements IStatistic {
if (mergeFileWriter != null) {
mergeFileWriter.endFile(fileSchema);
+ mergeFileWriter = null;
}
backupIntervalFile.setBaseDirIndex(directories.getTsFileFolderIndex(mergeBaseDir));
backupIntervalFile.setRelativePath(mergeFileName);
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/RecordMemController.java b/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/RecordMemController.java
index 80a8014..c9cb202 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/RecordMemController.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/engine/memcontrol/RecordMemController.java
@@ -82,42 +82,18 @@ public class RecordMemController extends BasicMemController {
AtomicLong userUsage = memMap.computeIfAbsent(user, k -> new AtomicLong(0));
long oldUsage = userUsage.get();
- long newTotUsage = totalMemUsed.get() + usage;
- // check if the new usage will reach dangerous threshold
- if (newTotUsage > dangerouseThreshold) {
- logDangerous(newTotUsage, user);
+ long newTotUsage = totalMemUsed.addAndGet(usage);
+ userUsage.addAndGet(usage);
+ if (newTotUsage < warningThreshold) {
+ logSafe(newTotUsage, user, usage, oldUsage);
+ return UsageLevel.SAFE;
+ } else if (newTotUsage < dangerouseThreshold) {
+ logWarn(newTotUsage, user, usage, oldUsage);
+ return UsageLevel.WARNING;
+ } else {
+ logDangerous(newTotUsage, user, usage, oldUsage);
return UsageLevel.DANGEROUS;
}
-
- if (newTotUsage < dangerouseThreshold) {
- newTotUsage = totalMemUsed.addAndGet(usage);
- // double check if updating will reach dangerous threshold
- if (newTotUsage < warningThreshold) {
- // still safe, action taken
- userUsage.addAndGet(usage);
- logSafe(newTotUsage, user, usage, oldUsage);
- return UsageLevel.SAFE;
- } else if (newTotUsage < dangerouseThreshold) {
- // become warning because competition with other threads, still take the action
- userUsage.addAndGet(usage);
- logWarn(newTotUsage, user, usage, oldUsage);
- return UsageLevel.WARNING;
- } else {
- logDangerous(newTotUsage, user);
- // become dangerous because competition with other threads, discard this action
- totalMemUsed.addAndGet(-usage);
- return UsageLevel.DANGEROUS;
- }
- }
- return null;
- }
-
- private void logDangerous(long newTotUsage, Object user) {
- if (LOGGER.isWarnEnabled()) {
- LOGGER.warn("Memory request from {} is denied, memory usage : {}",
- user,
- MemUtils.bytesCntToStr(newTotUsage));
- }
}
private void logSafe(long newTotUsage, Object user, long usage, long oldUsage) {
@@ -138,6 +114,15 @@ public class RecordMemController extends BasicMemController {
}
}
+ private void logDangerous(long newTotUsage, Object user, long usage, long oldUsage) {
+ if (LOGGER.isWarnEnabled()) {
+ LOGGER.warn("Warning Threshold : {} allocated to {}, it is using {}, total usage {}",
+ MemUtils.bytesCntToStr(usage), user,
+ MemUtils.bytesCntToStr(oldUsage + usage),
+ MemUtils.bytesCntToStr(newTotUsage));
+ }
+ }
+
/**
* report the decreased memory usage of the object user.
*/
@@ -154,6 +139,7 @@ public class RecordMemController extends BasicMemController {
.error("{} requests to free {} bytes while it only registered {} bytes", user,
freeSize, usage);
totalMemUsed.addAndGet(-usageLong);
+ usage.set(0);
} else {
long newTotalMemUsage = totalMemUsed.addAndGet(-freeSize);
usage.addAndGet(-freeSize);