OutOfMemoryError:Java堆空间–分析和解决方法

java.lang.OutOfMemoryError:Java堆问题是在支持或开发复杂的Java EE应用程序时可能会遇到的最复杂的问题之一。
这篇简短的文章将为您提供此JVM HotSpot OutOfMemoryError错误消息的描述,以及在解决该问题之前应如何解决此问题。
有关如何确定要处理的OutOfMemoryError类型的快速帮助指南,请查阅此Blog中的相关文章。 您还将找到有关如何分析JVM堆转储和识别潜在内存泄漏的教程。
java.lang.OutOfMemoryError:Java堆空间–这是什么?
此错误消息通常是在JVM OutOfMemoryError条件后您将看到的中间件服务器日志(Weblogic,WAS,JBoss等)的内容:
·它是从实际的Java HotSpot VM本机代码生成的
·由于Java Heap(年轻一代/旧一代空间)内存分配失败( 由于Java Heap耗尽触发
在OpenJDK项目源代码的下面找到暴露JVM HotSpot实现的代码片段。 该代码显示了哪个条件触发了OutOfMemoryError:Java堆空间条件。
#collectedHeap.inline.hpp
我强烈建议您自己从OpenJDK下载HotSpot VM源代码,以自己的利益和将来的参考。
http://openjdk.java.net/groups/hotspot/
好的,我的应用程序Java Heap已经用尽了……我如何监视和跟踪我的应用程序Java Heap?
正确监视和跟踪Java堆空间(年轻一代和老一代空间)的内存占用量的最简单方法是从HotSpot VM中启用详细GC。 请简单地在JVM启动参数中添加以下参数:
-verbose:gc –XX:+ PrintGCDetails –XX:+ PrintGCTimeStamps –Xloggc:<应用程序路径> /gc.log
然后,您可以按照下面的教程进行操作,以了解如何阅读和分析HotSpot Java Heap占用空间。
http://javaeesupportpatterns.blogspot.com/2011/10/verbosegc-output-tutorial-java-7.html
好的,谢谢,现在我可以看到我有一个很大的Java Heap内存问题…但是如何解决呢?
有多种情况可能导致Java堆耗尽,例如:
·Java堆空间相对于您的应用程序流量和占用空间太小
·Java堆内存泄漏( OldGen空间随着时间的推移而缓慢增长……
·突发线程和/或流氓线程在短时间内等占用大量内存。
在下面找到您可以遵循的高级步骤列表,以进行进一步的故障排除:
·如果尚未完成,请启用详细GC >> -verbose:gc
·分析详细的GC输出并确定每个Java Heap空间(YoungGen和OldGen)的Java Heap的内存占用量
·分析详细的GC输出或使用JConsole之类的工具来确定您的Java Heap是否随时间泄漏。 这可以通过监视HotSpot旧发电机空间来观察。
·监视您的中间件线程并定期生成JVM线程转储,尤其是当观察到Java Heap利用率突然增加时。 线程转储分析将使您能够查明潜在的长时间运行的线程,这些线程可以在很短的时间内在Java堆上分配大量对象。 如果有的话
·在JVM启动参数中添加以下参数:-XX:HeapDumpOnOutOfMemoryError这将使HotSpot VM生成二进制的堆转储(HPROF)格式。 二进制堆转储是关键数据,可用来分析应用程序的内存占用和/或Java堆内存泄漏的源
从分辨率的角度来看,我建议您使用生成的堆转储分析Java堆内存占用量。 可以使用免费的内存分析器工具(MAT)分析二进制堆转储(HPROF格式)。 这将使您了解您的Java应用程序占用空间和/或查明可能的内存泄漏的来源。 一旦清楚了解了这种情况,就可以通过增加Java堆容量(通过–Xms和Xmx参数)或减少应用程序内存占用和/或消除应用程序代码中的内存泄漏来解决问题。 请注意,在中间件服务器代码和JDK中也经常发现内存泄漏。
我已尽一切努力,但我仍在努力查明OutOfMemoryError的来源
不用担心,只需在本文末尾发表评论/问题或直接通过电子邮件发送给我@ phcharbonneau @ hotmail.com 。 我目前提供免费的IT / Java EE咨询。 请在提供您生成的数据(例如指向堆转储的下载链接,线程转储数据,服务器日志等)的同时为您提供问题描述,我们将为您分析问题。
参考: OutOfMemoryError:Java堆空间– Java EE支持模式和Java教程博客中的JCG合作伙伴 Pierre-Hugues Charbonneau 分析和解决方法 。

翻译自: https://www.javacodegeeks.com/2012/05/outofmemoryerror-java-heap-space.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Google AppEngine:任务队列API

任务队列 com.google.appengine.api.taskqueue 使用任务队列&#xff0c;用户可以发起一个请求&#xff0c;以使应用程序执行此请求之外的工作。 它们是进行后台工作的强大工具。 此外&#xff0c;您可以将工作组织成小的离散单元&#xff08;任务&#xff09;。 然后&#xf…

NetBeans 7.2 beta:更快,更有用

NetBeans 7.2的beta版本引起了极大的兴奋。 在本文中&#xff0c;我将简要介绍一下此版本令人兴奋的原因&#xff08;包括更好的性能&#xff0c;提供更多的提示以及集成FindBugs&#xff09;。 NetBeans 7.2 beta在典型的下载捆绑软件中可用&#xff0c;从较小的Java SE&#…

WPF DevExpress 设置雷达图Radar样式

DevExpress中定义的ChartControl很不错&#xff0c;很多项目直接使用这种控件。 本节讲述雷达图的样式设置 <Grid><Grid.Resources><DataTemplate x:Key"LabelItemDataTemplate" DataType"dxc:SeriesLabelItem"><Border CornerRadius…

mxnet系列教程之1-第一个例子

第一个例子当然是mnist的例子 假设已经成功安装了mxnet 例子的代码如下&#xff1a; cd mxnet/example/image-classification python train_mnist.py这样就会运行下去 train_mnist.py的代码为 """ Train mnist, see more explanation at http://mxnet.io/tutori…

mysql数据存在就更新_Mysql:如果数据存在则更新,不存在则插入

mysql语法支持如果数据存在则更新&#xff0c;不存在则插入&#xff0c;首先判断数据存在还是不存在的那个字段要设置成unique索引&#xff0c;例如表tb_addrbook如下&#xff1a;索引&#xff1a;语句1:不存在插入INSERT INTO tb_addrbook(num,name,mobile) VALUE(1001,小李,1…

【Hadoop】Hadoop MR 自定义分组 Partition机制

1、概念 2、Hadoop默认分组机制--所有的Key分到一个组&#xff0c;一个Reduce任务处理 3、代码示例 FlowBean package com.ares.hadoop.mr.flowgroup;import java.io.DataInput; import java.io.DataOutput; import java.io.IOException;import org.apache.hadoop.io.WritableC…

android学习笔记35——AnimationDrawable资源

AnimationDrawable资源 AnimationDrawable&#xff0c;代表一个动画。 android既支持传统的逐帧动画(类似于电影方式&#xff0c;一张图片一张图片的切换)&#xff0c;也支持通过平移、变换计算出来的补间动画、属性动画。 下面以补间动画为例&#xff0c;介绍如何定义Animatio…

mysql启动时执行sql server_常见 mysql 启动、运行.sql 文件错误处理

1、mysql 启动错误处理查看 log&#xff1a;Mac: /usr/local/var/mysql/lizhendeMacBook-Pro.local.err根据 log 针对性的进行调整&#xff0c;包治百病2、Mysql Incorrect datetime value问题描述&#xff1a;低版本的 mysql 中&#xff0c;数据库转储 sql 文件。导入到高版本…

带有谓词的Java中的函数样式-第2部分

在本文的第一部分中&#xff0c;我们介绍了谓词&#xff0c;这些谓词通过具有返回true或false的单个方法的简单接口&#xff0c;为Java等面向对象的语言带来了函数式编程的某些好处。 在第二部分和最后一部分中&#xff0c;我们将介绍一些更高级的概念&#xff0c;以使您的谓词…

原生JavaScript+CSS3实现移动端滑块效果

在做web页面时&#xff0c;无论PC端还是移动端&#xff0c;我们会遇到滑块这样的效果&#xff0c;可能我们往往会想着去网上找插件&#xff0c;其实这个效果非常的简单&#xff0c;插件代码的的代码往往过于臃肿&#xff0c;不如自己动手&#xff0c;自给自足。首先看一下效果图…

Activiti绩效对决

每个人在学习Activiti时都会一直问到的问题&#xff0c;与软件开发本身一样古老&#xff1a;“它如何执行&#xff1f;”。 到现在为止&#xff0c;当您问我同样的问题时&#xff0c;我将告诉您Activiti如何以各种可能的方式最小化数据库访问&#xff0c;如何将流程结构分解为“…

Java线程死锁–案例研究

本文将描述从在IBM JVM 1.6上运行的Weblogic 11g生产系统中观察到的最新Java死锁问题的完整根本原因分析。 此案例研究还将证明掌握线程转储分析技能的重要性&#xff1b; 包括用于IBM JVM Thread Dump格式。 环境规格 – Java EE服务器&#xff1a;Oracle Weblogic Server 1…

bzoj1968: [Ahoi2005]COMMON 约数研究

水题。。。 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define rep(i,s,t) for(int is;i<t;i) int main(){int ans0,n;scanf("%d",&n);rep(i,1,n) ansn/i;printf("%d\n…

mysql查询某张表的所有外键_oracle中查询所有外键引用到某张表的记录

欢迎进入Oracle社区论坛&#xff0c;与200万技术人员互动交流 >>进入 oracle中查询所有外键引用到某张表的记录 //查询表的主键约束名 select * from user_constraints e where e.table_name表名;--输入 //查询所有引用到该主键的记录 select b.table_name,b.column_欢迎…

BTrace for Java应用程序简介

本文的目的是学习如何使用BTrace动态跟踪/观察正在运行的Java应用程序&#xff08;JDK 6&#xff09;&#xff0c;而无需更改应用程序的代码和配置参数。 什么是BTrace&#xff1f; BTrace是一个开源项目&#xff0c;始于2007年&#xff0c;最初由A.Sundararajan和K.Balasubra…

在Akka中实现主从/网格计算模式

主从模式是容错和并行计算的主要示例。 模式背后的想法是将工作划分为相同的子任务&#xff0c;然后将其委派给从属。 这些从节点或实例将处理工作任务&#xff0c;并将结果发送回主节点。 然后主节点将编译从所有从节点接收到的结果。关键是从节点仅知道如何处理任务&#xff…

react实现路由跳转_react实现hash路由

众所周知&#xff0c;目前单页面使用的路由有两种实现方式&#xff1a;hash 模式history 模式hash 模式路由原理&#xff1a;我们先来看hash模式&#xff0c;页面首次加载时需要在load事件中解析初始的URL&#xff0c;从而展示进入的页面。当 # 后面的哈希值发生变化时&#xf…

Java中的Google协议缓冲区

总览 协议缓冲区是一种用于结构化数据的开源编码机制。 它是由Google开发的&#xff0c;旨在实现语言/平台中立且可扩展。 在本文中&#xff0c;我的目的是介绍Java平台上下文中协议缓冲区的基本用法。 Protobuff比XML更快&#xff0c;更简单&#xff0c;并且比JSON更紧凑。 当…

esp8266 lcd 天气_ESP8266 显示实时天气信息

代码文件getdata.h#include #include #include #include #include #include #include #define DEBUG 1#define MAX_CONTENT_SIZE 2000const char* ssid "weather";const char* password "mymymymy";WiFiClient client;HTTPClient http;char response[MAX…

【VS开发】visual studio 2015的NuGet Manager解决方案管理功能

NuGet的官方说明是&#xff1a;NuGet是一款Visual Studio的扩展&#xff0c;它可以简单的安装、升级开源库和工具。 官网地址&#xff1a;http://www.nuget.org/ 官网最醒目的位置就是下载链接&#xff0c;安装完成后我们来快速体验一把。 手上有个小项目需要使用到json格式&am…