diff --git a/.gitignore b/.gitignore index a43680eef2b..99892e7e12d 100644 --- a/.gitignore +++ b/.gitignore @@ -66,6 +66,6 @@ venv/ #ctags .tags - +/.vs #license tests/secrets/nebula.license diff --git a/src/common/memory/MemoryUtils.cpp b/src/common/memory/MemoryUtils.cpp index e2803a15d75..7e0bb7db7cc 100644 --- a/src/common/memory/MemoryUtils.cpp +++ b/src/common/memory/MemoryUtils.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -21,7 +22,9 @@ using nebula::fs::FileUtils; namespace nebula { -static const std::regex reMemAvailable(R"(^Mem(Available|Total):\s+(\d+)\skB$)"); +static const std::regex reMemAvailable( + R"(^Mem(Available|Free|Total):\s+(\d+)\skB$)"); // when can't use MemAvailable, use MemFree + // instead. static const std::regex reTotalCache(R"(^total_(cache|inactive_file)\s+(\d+)$)"); std::atomic_bool MemoryUtils::kHitMemoryHighWatermark{false}; @@ -63,13 +66,13 @@ StatusOr MemoryUtils::hitsHighWatermark() { auto& sm = iter.matched(); memorySize.emplace_back(std::stoul(sm[2].str(), NULL) << 10); } - CHECK_EQ(memorySize.size(), 2U); - size_t i = 0, j = 1; - if (memorySize[0] < memorySize[1]) { - std::swap(i, j); + std::sort(memorySize.begin(), memorySize.end()); + if (memorySize.size() >= 2u) { + total = memorySize.back(); + available = memorySize[memorySize.size() - 2]; + } else { + return false; } - total = memorySize[i]; - available = memorySize[j]; } auto hits = (1 - available / total) > FLAGS_system_memory_high_watermark_ratio;