java OOM(OutOfMemory) 问题分析

2024-02-12 21:18

本文主要是介绍java OOM(OutOfMemory) 问题分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

偶然在工作中有发现部署的应用有内存溢出问题,所以抽空补充了一下这些方面的知识。

内存溢出我们可以通过heapDump来分析到底是那个对象吃掉过多内存或者那个类的实例过多等原因而导致。

因而我们首先要做的就是获取heapDump,我这里使用两种方式获取:

1. 因为部署的是web应用,所以在tomcat以及weblogic等服务器上都有针对内存溢出的处理方式,这种处理方式很简单,只需在JAVA_OPTIONS选项增加

    -XX:+HeapDumpOnOutOfMemoryError 即可,增加了这个配置,当抛出内存溢出异常时,会自动将当前JVM所使用的内存数据dump到当前目录下,输出的文件名格式:

    java_pid<真实的pid,这里是tomcat的进程号>.hprof。 我们在配置JAVA_OPTIONS时也可指定这个dump文件的输出路径,只需要再增加一个配置项即可:

 -XX:HeapDumpPath=file_path。

2. 也可以直接使用jdk自带的jmap工具来打heapDump. 使用很简单:jmap -dump:format=b,file=<dump文件输出路径> <java 线程pid>


通过上述两种方法我们获取了heapDump文件,然后我们需要通过辅助工具来帮助我们进行分析。这里通过两种常用工具来分析dump文件。

1. 可以通过Java jdk自带的jhat工具来分析。直接执行:jhat -J-Xmx500m -port 7000 <dump文件>。端口默认7000, 可以不需要设置。

    执行后的结果如下:

    

    在执行完上述命令后,直接通过浏览器访问:http://<ip> :7000来查看分析结果。

    

2. 可以使用IBM的heapanalyzer工具。使用非常简单,图形化显示,推荐使用。

    首先,我们需要下载这个工具包,然后执行: java -Xmx1000m -jar ha442.jar <dump文件>, 执行命令后会自动打开图形化界面(如果在linux环境下,需要安装图形化显示端)。如下图:


这篇关于java OOM(OutOfMemory) 问题分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/703632

相关文章

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

基于Java和FFmpeg实现视频压缩和剪辑功能

《基于Java和FFmpeg实现视频压缩和剪辑功能》在视频处理开发中,压缩和剪辑是常见的需求,本文将介绍如何使用Java结合FFmpeg实现视频压缩和剪辑功能,同时去除数据库操作,仅专注于视频处理,需... 目录引言1. 环境准备1.1 项目依赖1.2 安装 FFmpeg2. 视频压缩功能实现2.1 主要功

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

Spring-DI依赖注入全过程

《Spring-DI依赖注入全过程》SpringDI是核心特性,通过容器管理依赖注入,降低耦合度,实现方式包括组件扫描、构造器/设值/字段注入、自动装配及作用域配置,支持灵活的依赖管理与生命周期控制,... 目录1. 什么是Spring DI?2.Spring如何做的DI3.总结1. 什么是Spring D