当前位置: 首页 > news >正文

Java应用生产Full GC或者OOM问题如何定位

1 引言

生产应用服务频繁Full GC却无法释放内存,甚至可能OOM,这种情况很有可能是内存泄露或者堆内存分配不足,此时需要dump堆信息来定位问题,查看是哪些地方内存泄漏。

Dump文件也称为内存转储文件或内存快照文件,是一个进程或者系统在某一个给定时间的内存快照。例如当进程崩溃或进程出现其它问题时,甚至在任何时候,我们都可以使用工具备份系统或进程的内存进行调试和分析。它包含模块信息、线程信息、堆栈调用信息、异常信息等。

2 查看java服务进程pid

ps -aux|grep java

3 GC简单分析

可使用jdk自带的jstat简单分析一下gc情况

# 每隔 1000毫秒输出一次 jstat -gcutil <pid> 1000

输出如下:

----------------------------------------

S0 S1 E O M CCS YGC YGCT FGC FGCT GCT

0.00 66.15 28.84 77.76 93.88 91.90 183 1.058 4 0.517 1.575

0.00 66.15 29.51 77.76 93.88 91.90 183 1.058 4 0.517 1.575

0.00 66.15 30.45 77.76 93.88 91.90 183 1.058 4 0.517 1.575

-----------------------------------------

S0:幸存区survivor0使用百分比

S1:幸存区survivor1使用百分比

E:新生代Eden使用百分比

O:老年代Old使用百分比

M:元数据 Metaspace使用百分比

CCS:压缩类空间Compressed class space使用百分比

YGC:Young GC次数

YGCT:Young GC耗时,毫秒

FGC:Full GC次数

FGCT:Full GC耗时,毫秒

GCT:GC总耗时

2次相邻的GC,可以快速判断那一次GC的耗时;GCT / GC = 平均每次GC耗时

GC是否频繁标准参考:Young GC执行迅速(50毫秒以内)、Young GC执行不频繁(间隔10秒左右一次)、Full GC执行迅速(1秒以内)、Full GC执行不频繁(间隔10分钟左右一次)

如发现Full GC次数频繁增加,Young GC次数不变或变化很小,这就是堆内存不足,很有可能就是内存泄漏的问题。

4 导出dump文件

分析dump文件首先要获取dump文件,获取方法基本有2种

4.1 设置JVM的环境变量

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/xxx.hprof

那在OOM的时候会自动在指定目录生产dump文件,此时只需要在指定目录获取即可

4.2 通过jmap获取

jmap -dump:live,format=b,file=/logs/xxx.hprof <pid>

5 分析dump文件

对于小于自身电脑内存的dump文件,可尝试下载到本地进行分析,可使用的工具有:JVisualVM、JHat、MAT

5.1 使用JVisualVM

在jdk的bin目录下面有JVisualVM,打开它,然后选中文件->装入,选则dump文件,即可

点击异常错误的线程:XNIO-1 task-1,等待一会既可以打开堆转储上的线程的指定OOM的地方

查看具体实例数量和占用大小

点击类 -> 在实例数最多的类名上右击 -> 选择在实例视图中展示 -> 查看引用

右键选择在线程中显示,可以查询详情

5.2 使用jhat

jhat -J-Xmx1024M [file]

执行后等待console中输出Started HTTP on port 7000,看到后就可以通过浏览器访问http://ip:7000了,此页面默认为按package分类显示系统中所有的对象实例。在页面的最下端有Other Queries导航,其中有显示jvm中对象实例个数的链接、有显示jvm中对象大小的链接等,点击显示jvm中对象大小的链接,jhat在分析大的堆dump文件时表现不好,速度很慢。

5.3 使用mat(推荐)

5.3.1 下载

mat下载地址:https://eclipse.dev/mat/previousReleases.php

根据jdk版本下载合适的mat版本,可以通过uname -a命令查看服务器的操作系统版本号

[root@xxx ~]# uname -a
Linux xxxx 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

   使用的是JDK1.8,系统是x86_64,需要选择如下版本:

5.3.2 解压

unzip MemoryAnalyzer-1.8.0.20180604-linux.gtk.x86_64.zip

5.3.3 修改内存

vi MemoryAnalyzer.ini

5.3.4 文件分析

./ParseHeapDump.sh [hprof文件] org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components

其中hprof文件在实际使用的时候需要替换为hprof文件的路径。运行完毕后在hprof文件所在目录会生成一系列的index/threads文件和3个压缩文件。这3个压缩文件是我们重点关注的分析报告,分别为:

  • xxx_Leak_Suspects.zip:报告包含怀疑造成内存泄漏的地方,报告中包含了class层级图。对于OOM的场景能够很容易的定位到是哪个对象占用了大量内存不释放。
  • xxx_System_Overview.zip:包含heap dump基本信息,dump进程JVM的相关配置和线程信息等。
  • xxx_Top_Components.zip:查看占用空间最大的几个object/class/classloader/package等。报告以饼图和表格的形式展示。通过这个报告可以定位出Java程序运行时哪些对象占用内存较多,对问题排查和程序优化很有帮助。

这三个报告是分析问题的关键。我们通过报告找出内存占用过大的对象,然后结合日志和项目源代码分析程序逻辑,逐步定位出问题。

主要看xxx_Leak_Suspects.zip,解压,打开index.html

     大部分情况很容易看出问题出现在哪里,当前有时候可能需要进一步分析。

参考资料:

gc 查询java java 查看gc情况_mob6454cc61981e的技术博客_51CTO博客

https://www.cnblogs.com/east7/p/16989436.html

使用Linux的MAT分析工具分析超大dump文件(几GB)_准备起飞55的博客-CSDN博客

Java Heap Dump 分析步骤 - 简书

dump文件过大使用linux mat分析记录_dump文件太大怎么分析-CSDN博客

相关文章:

Java应用生产Full GC或者OOM问题如何定位

1 引言 生产应用服务频繁Full GC却无法释放内存&#xff0c;甚至可能OOM&#xff0c;这种情况很有可能是内存泄露或者堆内存分配不足&#xff0c;此时需要dump堆信息来定位问题&#xff0c;查看是哪些地方内存泄漏。 Dump文件也称为内存转储文件或内存快照文件&#xff0c;是…...

Data processing flow

1. 找出第一年的address&#xff0c;有lat和long&#xff0c;自动生成 csv_log_lat_county.ipynb import csv from geopy.geocoders import Nominatim from geopy.exc import GeocoderTimedOutgeolocator Nominatim(user_agent"my-app") data_csv r"D:/year…...

CAP理论与BASE理论

分布式领域CAP理论&#xff1a; Consistency(一致性), 数据一致更新&#xff0c;所有数据变动都是同步的Availability(可用性), 好的响应性能Partition tolerance(分区容错性) 可靠性定理&#xff1a;任何分布式系统只可同时满足二点&#xff0c;没法三者兼顾。忠告&#xff1…...

DRM全解析 —— ADD_FB2(3)

接前一篇文章&#xff1a;DRM全解析 —— ADD_FB2&#xff08;2&#xff09; 本文参考以下博文&#xff1a; DRM驱动&#xff08;四&#xff09;之ADD_FB 特此致谢&#xff01; 上一回围绕libdrm与DRM在Linux内核中的接口&#xff1a; DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB2,…...

【Java】SpringMVC ResponseBodyAdvice详解

目录 1. ResponseBodyAdvice 2. supports方法 3. beforeBodyWrite方法 4. 实践 1. ResponseBodyAdvice Spring MVC的ResponseBodyAdvice是Spring 4.1版本中引入的一个接口&#xff0c;它允许在Controller控制器中ResponseBody修饰的方法或ResponseEntity执行之后&#xff…...

python常见面试题五

解释 Python 中的列表推导式 (list comprehension)。 答&#xff1a;列表推导式是一种创建新列表的简洁方式。它可以在一行代码中通过对一个可迭代对象应用表达式和条件来生成新的列表。 解释 Python 中的时间复杂度和空间复杂度。 答&#xff1a;时间复杂度衡量算法运行时间的…...

SpringBoot结合Vue.js+axios框架实现增删改查功能+网页端实时显示数据库数据(包括删除多条数据)

本文适用对象&#xff1a;已有基础的同学&#xff0c;知道基础的SpringBoot配置和Vue操作。 在此基础上本文实现基于SpringBoot和Vue.js基础上的增删改查和数据回显、刷新等。 一、实时显示数据库数据 实现步骤&#xff1a; 第1步&#xff1a;编写动态请求响应类&#xff1a…...

曙光亮相工博会,发布首款国产高端工业实时仿真计算系统

9月19日-23日&#xff0c;中科曙光亮相第23届中国国际工业博览会&#xff0c;并受邀于主论坛发表主题演讲&#xff0c;在工业权威会议上展示曙光领先的工业数字化技术与实践成果。展会期间&#xff0c;曙光重磅发布首款国产工业实时仿真计算系统&#xff0c;并展出多项工业数字…...

「大数据-2.0」安装Hadoop和部署HDFS集群

目录 一、下载Hadoop安装包 二、安装Hadoop 0. 安装Hadoop前的必要准备 1. 以root用户登录主节点虚拟机 2. 上传Hadoop安装包到主节点 3. 解压缩安装包到/export/server/目录中 4. 构建软链接 三、部署HDFS集群 0. 集群部署规划 1. 进入hadoop安装包内 2 进入etc目录下的hadoop…...

文档在线预览word、pdf、excel文件转html以实现文档在线预览

目录 一、前言 1、aspose2 、poi pdfbox3 spire二、将文件转换成html字符串 1、将word文件转成html字符串 1.1 使用aspose1.2 使用poi1.3 使用spire2、将pdf文件转成html字符串 2.1 使用aspose2.2 使用 poi pbfbox2.3 使用spire3、将excel文件转成html字符串 3.1 使用aspose…...

FFmpeg视音频分离器----向雷神学习

雷神博客地址&#xff1a;https://blog.csdn.net/leixiaohua1020/article/details/39767055 本程序可以将封装格式中的视频码流数据和音频码流数据分离出来。 在该例子中&#xff0c; 将FLV的文件分离得到H.264视频码流文件和MP3 音频码流文件。 注意&#xff1a; 这个是简化版…...

CentOS 8开启bbr

CentOS 8 默认内核版本为 4.18.x&#xff0c;内核版本高于4.9 就可以直接开启 BBR&#xff0c;所以CentOS 8 启用BBR非常简单不需要再去升级内核。 开启bbr echo "net.core.default_qdiscfq" >> /etc/sysctl.conf echo "net.ipv4.tcp_congestion_contro…...

Redis的安装与基本使用

文章目录 Linux 环境下安装Redis下载Redis 安装包解压安装包安装Redis进入redis安装包下编译并且安装到指定目录下 启动redis配置远程访问找到Redis.config文件 Windows 环境下安装Redis说明官方提供方式安装或启用WSL2在WSL&#xff08;Ubuntu&#xff09;上安装Redis启动Redi…...

2014 款金旅牌小型客车 发动机怠速抖动、加速无力

故障现象 一辆2014款金旅牌小型客车&#xff0c;搭载JM491Q-ME发动机&#xff0c;累计行驶里程约为20万km。车主反映&#xff0c;最近该车发动机怠速抖动、加速无力&#xff0c;且经常缺少冷却液。 故障诊断 根据车主描述的故障现象&#xff0c;初步判断该车气缸垫损坏&#…...

R语言逻辑回归、决策树、随机森林、神经网络预测患者心脏病数据混淆矩阵可视化...

全文链接:https://tecdat.cn/?p33760 众所周知&#xff0c;心脏疾病是目前全球最主要的死因。开发一个能够预测患者心脏疾病存在的计算系统将显著降低死亡率并大幅降低医疗保健成本。机器学习在全球许多领域中被广泛应用&#xff0c;尤其在医疗行业中越来越受欢迎。机器学习可…...

网站被劫持了怎么办

网站被劫持了怎么办 建议新建一个index.html文件&#xff0c;文件中只写几个数字&#xff0c;上传到网站根目录&#xff0c;然后访问网站域名&#xff0c;看看是不是正常&#xff0c;从而可以确定是程序问题还是域名被劫持的问题。 如果是域名被劫持&#xff0c;你可以登录你的…...

【面试题精讲】Java包装类缓存机制

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址[1] 面试题手册[2] 系列文章地址[3] 1. 什么是 Java 包装类缓存机制? Java 中的包装类&#xff08;Wrapper Class&#xff09;是为了将…...

网络相关知识

0 socket SOCK_DGRAM #无连接UDP SOCK_STREAM #面向连接TCP 1 UDP 1.1 检测UDP yum install -y nc 使用netcat测试连通性 服务器端启动 UDP 30003 端口 ​ nc -l -u 30003 客户端连接服务器的30003端口&#xff08;假设服务的IP地址是119.23.67.12&#xff09; ​nc -u 119…...

商品冷启动推荐综述

About Me: LuckBoyPhd/Resume (github.com) (1)一种基于三部图网络的协同过滤算法 推荐系统是电子商务领域最重要的技术之一,而协同过滤算法又是推荐系统用得最广泛的.提出了一种基于加权三部图网络的协同过滤算法,用户、产品及标签都被考虑到算法中,并且研究了标签结点的度对…...

GEO生信数据挖掘(二)下载基因芯片平台文件及注释

检索到目标数据集后&#xff0c;开始数据挖掘&#xff0c;本文以阿尔兹海默症数据集GSE1297为例 目录 下载平台文件 1.AnnotGPL参数改为TRUE,联网下载芯片平台的soft文件。&#xff08;国内网速奇慢经常中断&#xff09; 2.手工去GEO官网下载 转换芯片探针ID为gene name 拓…...

Ubuntu 20.04黑屏救星:手把手教你用tty2命令行重装NVIDIA驱动(附内核更新关闭指南)

Ubuntu 20.04黑屏救援实战&#xff1a;从tty2命令行到图形界面恢复全指南 当你满心欢喜地启动Ubuntu 20.04&#xff0c;准备开始一天的工作时&#xff0c;迎接你的却是一片漆黑——这是许多Linux用户都曾遭遇过的噩梦场景。NVIDIA驱动问题导致的系统黑屏不仅令人沮丧&#xff0…...

企业AI成本为什么总是失控?Token计量与费用归因体系设计

一、问题背景随着企业大规模接入大模型能力&#xff0c;一个普遍现象正在浮现&#xff1a;AI成本正在失控。月初预算批了10万&#xff0c;月底账单来了20万。问财务&#xff1a;钱花哪了&#xff1f;财务说&#xff1a;只知道总额&#xff0c;不知道细节。问IT&#xff1a;哪个…...

VMware Unlocker 3.0:5分钟快速配置macOS虚拟机终极指南

VMware Unlocker 3.0&#xff1a;5分钟快速配置macOS虚拟机终极指南 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker VMware Unlocker 3.0是一款专为破解VMware限制而设计的开源工具&#xff0c;让您能在…...

汽车软件平台演进:从AUTOSAR到Hypervisor,如何重塑开发与商业模式

1. 汽车软件平台现状&#xff1a;从“硬骨头”到“乐高积木”的演进干了十几年汽车电子&#xff0c;我亲眼看着车里的代码从几万行膨胀到上亿行。十年前&#xff0c;我们还在为某个ECU&#xff08;电子控制单元&#xff09;里塞进一个简单的网络协议栈而通宵调试&#xff1b;现…...

【数字孪生实战案例】怎样设置数据筛选条件,精准控制电子地图飞线的呈现效果?~山海鲸可视化

在数据可视化大屏应用里&#xff0c;电子地图飞线是展示跨地域关联数据的重要载体。当飞线数据量大、维度繁杂时&#xff0c;通过配置数据条件对地图飞线做精准筛选&#xff0c;能够过滤冗余信息、聚焦核心数据&#xff0c;让地图呈现更简洁直观&#xff0c;有效提升整体可视化…...

有机颜料哪个更前沿

下游行业不断升级&#xff0c;从环保要求到个性化着色需求都在提升&#xff0c;很多采购和技术负责人都会问&#xff1a;现在有机颜料哪个方向更前沿&#xff1f;其实有机颜料的技术迭代始终围绕下游需求走&#xff0c;没有绝对的“最优前沿”&#xff0c;只有更适配自身需求的…...

新手工程师别慌!从零开始搞定一颗新Sensor的完整调试手册(附常见问题排查清单)

新手工程师别慌&#xff01;从零开始搞定一颗新Sensor的完整调试手册 刚拿到一颗新Sensor时&#xff0c;面对厚厚的Datasheet和复杂的原理图&#xff0c;很多新手工程师都会感到无从下手。本文将带你系统性地梳理整个Sensor调试流程&#xff0c;从关键参数提取到问题排查&#…...

Bootstrap 标签页

Bootstrap 标签页 Bootstrap 标签页&#xff08;Tab&#xff09;是 Bootstrap 框架中的一种交互组件&#xff0c;允许用户在多个页面元素或内容区域之间进行切换。本文将详细介绍 Bootstrap 标签页的使用方法、特点以及如何将其应用于实际项目中。 一、Bootstrap 标签页的使用方…...

5G O-RAN中AI驱动的延迟预测系统设计与优化

1. 项目背景与核心价值在5G O-RAN架构中&#xff0c;延迟控制一直是网络优化的核心痛点。传统电信设备厂商采用的黑盒方案&#xff0c;使得运营商难以针对特定场景进行精细化调优。而O-RAN的开放特性虽然带来了灵活性&#xff0c;但也引入了新的挑战——当CU&#xff08;集中单…...

MCP密钥安全管理的无侵入解决方案:mcp-safe-run工具详解

1. 项目概述&#xff1a;告别硬编码&#xff0c;拥抱安全的MCP密钥管理如果你和我一样&#xff0c;日常开发中深度依赖Claude、Cursor、Windsurf这类智能编码助手&#xff0c;那你肯定对Model Context Protocol&#xff08;MCP&#xff09;不陌生。MCP作为连接AI模型与外部工具…...