@name 生成headdump 文件 @author lkq<2021-09-24> @param type Finfo 代表强制获取每个类占用 info获取每个类占用 dump生成dump文件 Fdump 强制生成dump文件 heap 显示Java堆详细信息 Fheap 强制显示Java堆详细信息 @return list
(self, get)
| 4444 | return public.returnMsg(True, '删除成功') |
| 4445 | |
| 4446 | def heapdump_project(self, get): |
| 4447 | ''' |
| 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 | ''' |
| 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]) |
nothing calls this directly
no test coverage detected