diff --git a/source/tools/detect/memgraph/memgraph.py b/source/tools/detect/memgraph/memgraph.py index 0dba3e3cecc2cdbedbeda86fcff71808340c46b9..5f865208c889bb9e5f3cc5c75d7b60724e0017ed 100644 --- a/source/tools/detect/memgraph/memgraph.py +++ b/source/tools/detect/memgraph/memgraph.py @@ -198,6 +198,8 @@ def memgraph_get_meminfo(meminfo): def dump2json(res,filename): jsonStr = json.dumps(res) + if not os.path.exists(os.path.dirname(filename)): + os.popen("mkdir -p "+os.path.dirname(filename)).read() with open(filename, 'w') as jsonFile: jsonFile.write(jsonStr) diff --git a/source/tools/detect/memleak/check.c b/source/tools/detect/memleak/check.c index bdf422df6c8e9226f26a495d31710c94ab4fdbce..4c21645f3a355707a3771d70252e93a1e8efc332 100644 --- a/source/tools/detect/memleak/check.c +++ b/source/tools/detect/memleak/check.c @@ -96,7 +96,7 @@ int read_meminfo(struct meminfo *mem) st_mem.huge2M = hugeTotal * hugeSize; st_mem.kernel = st_mem.tlmkb - st_mem.frmkb - st_mem.acmkb - st_mem.iamkb - st_mem.lock -\ - st_mem.bufkb - st_mem.slmkb - st_mem.huge2M - st_mem.huge1G; + /*st_mem.bufkb - */st_mem.slmkb - st_mem.huge2M - st_mem.huge1G; if (st_mem.kernel < 0) st_mem.kernel = (1 << 10); diff --git a/source/tools/detect/memleak/main.c b/source/tools/detect/memleak/main.c index 9be3a939b9e0b3bae6313de29291afc4961284e7..bb51e39cd1617b6030d31573075377ddffcf3b6e 100644 --- a/source/tools/detect/memleak/main.c +++ b/source/tools/detect/memleak/main.c @@ -44,6 +44,7 @@ static int memleak_check_only(struct meminfo *mi) read_meminfo(mi); vmalloc = vmalloc_main(0, NULL); printf("allocPages:%dM, uslab:%dM vmalloc:%dM\n", (mi->kernel)/1024, mi->uslabkb/1024, vmalloc/1024); + printf("诊断结论:"); if (mi->kernel < vmalloc) mi->kernel = vmalloc + 1; @@ -57,6 +58,8 @@ static int memleak_check_only(struct meminfo *mi) } else if (vmalloc > 2*1024 * 1024) { printf("vmalloc memleak\n"); return MEMLEAK_TYPE_VMALLOC; + } else { + printf(" no memleak\n"); } return 0; } diff --git a/source/tools/detect/memleak/user_api.h b/source/tools/detect/memleak/user_api.h index c2ce97a77e45dd2fa370eec0ca4595936de2bbcc..7f740db0d2da2c398d34d31f1ba153f4fcf10c88 100644 --- a/source/tools/detect/memleak/user_api.h +++ b/source/tools/detect/memleak/user_api.h @@ -20,7 +20,7 @@ struct meminfo { unsigned long comkb; unsigned long uslabkb; unsigned long slabkb; - unsigned long kernel; + long kernel; unsigned long huge2M; unsigned long huge1G; unsigned long lock; diff --git a/source/tools/detect/oomcheck/oomcheck.py b/source/tools/detect/oomcheck/oomcheck.py index 28f4bae60f84547906a6568e009f9dea546e94fa..3b54fd5abcb93600e4ea706390466225df0ed71a 100644 --- a/source/tools/detect/oomcheck/oomcheck.py +++ b/source/tools/detect/oomcheck/oomcheck.py @@ -175,7 +175,8 @@ def oom_get_cgroup_shmem(oom_result, line, num): inanon = line.strip().split("inactive_anon:")[1] inanon = inanon.split()[0][:-2] - anon = line.strip().split("active_anon:")[1] + anon = line.strip().split("inactive_anon:")[1] + anon = anon.strip().split("active_anon:")[1] anon = anon.split()[0][:-2] rss = line.strip().split("rss:")[1] @@ -333,6 +334,41 @@ def oom_check_score(oom, oom_result): else: return ',%d个进程%s累加消耗内存%dKB,oom_score_adj:%s. 另需进一步确认进程oom score设置是否合理.'%(res_total['cnt'],res_total['task'],res_total['rss']*4,res_total['score']) +def oom_get_podName(cgName, cID): + podName = 'unknow' + if cgName.find("kubepods") == -1: + return "unknow" + cmd = "crictl inspect " + cID + " | grep -w io.kubernetes.pod.name " + res = os.popen(cmd).read().strip() + if res.find("io.kubernetes.pod.name") == -1: + return 'unknow' + res = res.split() + if len(res) < 2: + return 'unkonw' + if res[0].find("io.kubernetes.pod.name") != -1: + podName = res[1][1:-2] + return podName + +def oom_get_k8spod(oom_result,num): + oom = oom_result['sub_msg'][num] + cgName = oom['cg_name'] + oom['podName'] = 'unknow' + oom['containerID '] = 'unknow' + index = cgName.find("cri-containerd-") + if index != -1: + index = index + 15 + if index == -1: + index = cgName.find("docker-") + if index != -1: + index = index + 7 + if index == -1: + return '' + oom['containerID '] = cgName[index: index+13] + oom['podName'] = oom_get_podName(cgName, oom['containerID ']) + summary = '' + summary += "podName: %s, containerID: %s\n"%(oom['podName'], oom['containerID ']) + return summary + def oom_output_msg(oom_result,num): oom = oom_result['sub_msg'][num] summary = '' @@ -343,6 +379,7 @@ def oom_output_msg(oom_result,num): summary += "进程所属cgroup:%s,"%(oom['cg_name']) if oom['cg_name'] in oom_result['cgroup']: summary += "cgroup OOM总次数:%s\n"%(oom_result['cgroup'][oom['cg_name']]) + summary += oom_get_k8spod(oom_result, num) summary += oom_cgroup_output(oom_result, num) summary += oom_host_output(oom_result, num) summary += "诊断结论:%s"%(oom['reason'])