MCPcopy Create free account
hub / github.com/aaPanel/BaoTa / heapdump_project

Method heapdump_project

class/projectModel/javaModel.py:4446–4529  ·  view source on GitHub ↗

@name 生成headdump 文件 @author lkq<2021-09-24> @param type Finfo 代表强制获取每个类占用 info获取每个类占用 dump生成dump文件 Fdump 强制生成dump文件 heap 显示Java堆详细信息 Fheap 强制显示Java堆详细信息 @return list

(self, get)

Source from the content-addressed store, hash-verified

4444 return public.returnMsg(True, '删除成功')
4445
4446 def heapdump_project(self, get):
4447 ''&#x27;
4448 @name 生成headdump 文件
4449 @author lkq<2021-09-24>
4450 @param type Finfo 代表强制获取每个类占用 info获取每个类占用 dump生成dump文件 Fdump 强制生成dump文件 heap 显示Java堆详细信息 Fheap 强制显示Java堆详细信息
4451 @return list
4452 ''&#x27;
4453 if not hasattr(get, 'type'):
4454 get.type = 'info'
4455 type = get.type
4456 else:
4457 type = get.type
4458 project_find = self.get_project_find(get.project_name)
4459 if not project_find:
4460 return public.returnMsg(False, '指定项目不存在2: {}'.format(get.project_name))
4461 if not project_find['project_config']['java_type'] == 'springboot': return public.returnMsg(
4462 False, '只支持Springboot项目'
4463 )
4464 # 获取jmap jhat jstack绝对路径
4465 path = self.get_jmap_path(project_find)
4466 # 获取运行状态
4467 if not self.get_project_run_state(project_name = get.project_name):
4468 return public.returnMsg(False, '指定项目未启动: {}'.format(get.project_name))
4469 # 获取pid
4470 pidlist = self.get_project_load_info(project_name = get.project_name)
4471 if not pidlist:
4472 return public.returnMsg(False, '指定项目未启动: {}'.format(get.project_name))
4473 pid = 0
4474 for i in pidlist:
4475 pid = i
4476 break
4477 if pid == 0:
4478 return public.returnMsg(False, '指定项目未启动: {}'.format(get.project_name))
4479 if 'jmap' in path:
4480 jmap_path = path['jmap']
4481 if type == 'Finfo':
4482 # 强制显示堆中对象的统计信息
4483 cmd = '{} -F -histo {} | head -n 100'.format(jmap_path, pid)
4484 elif type == 'info':
4485 # 显示堆中对象的统计信息
4486 cmd = '{} -histo:live {} | head -n 100'.format(jmap_path, pid)
4487 elif type == 'dump':
4488 path = self._springoot_dump + '/' + str(int(time.time())) + '.dump'
4489 # 生成堆转储快照
4490 cmd = '{} -dump:live,format=b,file={} {}'.format(jmap_path, path, pid)
4491 ret = public.ExecShell(cmd, user = project_find['project_config']['run_user'])
4492 if os.path.exists(path):
4493 if os.path.exists(self._springoot_dump + '/' + get.project_name + '.json'):
4494 try:
4495 ret = json.loads(public.ReadFile(self._springoot_dump + '/' + get.project_name + '.json'))
4496 if path not in ret:
4497 ret.append(path)
4498 public.WriteFile(
4499 self._springoot_dump + '/' + get.project_name + '.json', json.dumps(ret)
4500 )
4501 except:
4502 public.WriteFile(
4503 self._springoot_dump + '/' + get.project_name + '.json', json.dumps([path])

Callers

nothing calls this directly

Calls 13

get_project_findMethod · 0.95
get_jmap_pathMethod · 0.95
get_project_run_stateMethod · 0.95
get_project_load_infoMethod · 0.95
returnMsgMethod · 0.80
timeMethod · 0.80
ExecShellMethod · 0.80
formatMethod · 0.45
existsMethod · 0.45
loadsMethod · 0.45
ReadFileMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected