From a313e011ef9afab93b727a5ec754b7b1ed6cad2b Mon Sep 17 00:00:00 2001 From: xinwen Date: Fri, 26 Nov 2021 16:46:45 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=86=85=E5=AD=98=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=8E=87=E5=85=BC=E9=A1=BE=20docker=20cgroup=20limit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/utils/common.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/apps/common/utils/common.py b/apps/common/utils/common.py index 7c449b0f0..3bdcfa622 100644 --- a/apps/common/utils/common.py +++ b/apps/common/utils/common.py @@ -252,7 +252,33 @@ def get_cpu_load(): return float(single_cpu_load_1) +def get_docker_mem_usage_if_limit(): + try: + with open('/sys/fs/cgroup/memory/memory.limit_in_bytes') as f: + limit_in_bytes = int(f.readline()) + total = psutil.virtual_memory().total + if limit_in_bytes >= total: + raise ValueError('Not limit') + + with open('/sys/fs/cgroup/memory/memory.usage_in_bytes') as f: + usage_in_bytes = int(f.readline()) + + with open('/sys/fs/cgroup/memory/memory.stat') as f: + lines = f.readlines() + name, value = lines[33].split() + total_inactive_file = int(value) + + return ((usage_in_bytes - total_inactive_file) / limit_in_bytes) * 100 + + except Exception as e: + logger.error(f'Get memory usage by docker limit: {e}') + return None + + def get_memory_usage(): + usage = get_docker_mem_usage_if_limit() + if usage is not None: + return usage return psutil.virtual_memory().percent