服务器java.lang.OutOfMemoryError: allocLargeArray内存溢出的解决

今天一个web服务器不工作了,查看日志.tomcat报出如下信息:

Caused by: java.lang.OutOfMemoryError: allocLargeArray - Object size: 80040, Num elements: 40010

以上日志信息基本的意思是程序要分配一个大小为 80040字节的数组(在JVM中数组也是对象,也是在heap中分配的),40010是指数组元素的多少。但是分配这个数组的时候, heap没有可用的空间了。

针对以上情况,解决办法如下:

A:调整java JVM参数,优化java虚拟机, 适当调大heap的 设置

B:清理系统无用日志,优apache运行参数. 打开gc日志以收集更多的heap使用信息.

关于java JVM的优化 ,更深入了解如下:

JVM内存的设置的原理

默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错 :java.lang.OutOfMemoryError。

设置jvm内存的方法,对于单独的.class,可以用下面的方法对Test运行时的jvm内存 进行设置。

java -Xms64m -Xmx256m Test

-Xms是设置内存初始化的大小

-Xmx是设置最大能够使用内存的大小(最 好不要超过物理内存大小)

在weblogic中,可以在startweblogic.cmd中对每个domain虚拟内存的大小进行设置,默认的 设置是在commEnv.cmd里面。

 

JVM内存的调优

1. Heap设定与垃圾回收Java Heap分为3个区,Young,Old和 Permanent。Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象,本文 不讨论该区。JVM的Heap分配可以使用-X参数设定,

-Xms: 初始Heap大小

-Xmx: java heap最大值

-Xmn: young generation的heap大小

JVM有2个GC线程。第一个线程负责回收Heap的Young区。第二个线程在Heap不足时,遍历 Heap,将Young 区升级为Older区。Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行 会降低JVM的性能。

为什么一些程序频繁发生GC?有如下原因:

l         程序内调用了 System.gc()或Runtime.gc()。

l         一些中间件软件调用自己的GC方法,此时需要设置参数 禁止这些GC。

l         Java的Heap太小,一般默认的Heap值都很小。

l         频繁实例化对象,Release对象。此时尽量保存并重用对象,例如使用StringBuffer()和String()。

如果 你发现每次GC后,Heap的剩余空间会是总空间的50%,这表示你的Heap处于健康状态。

许多Server端的Java程序每次GC后 最好能有65%的剩余空间。经验之谈:

1.Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于 -Xmx的1/3[2]。

2.一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成[2]。

时间: 2024-02-28 20:39:50

服务器java.lang.OutOfMemoryError: allocLargeArray内存溢出的解决的相关文章

Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结(转)

java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生该错误的原因大都出于以下原因:JVM内存过小.程序不严密,产生了过多的垃圾. 导致OutOfMemoryError异常的常见原因有以下几种: 内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收: 代码中存在死循环或循环产生过多重复的对象实体: 使用的第三方软件中的BUG: 启动参数内存值设定的过小: 此错误常见的错误提示: tomcat

java.lang.OutOfMemoryError: Java heap space java内存溢出问题 有错误信息

问题描述 java.lang.OutOfMemoryError: Java heap space java内存溢出问题 有错误信息 2013-12-26 11:18:09 [ERROR]-[rmss:165] Housekeeping log.error( : java.lang.OutOfMemoryError: Java heap spaceat java.lang.AbstractStringBuilder.(AbstractStringBuilder.java:45)at java.la

java.lang.OutOfMemoryError: CG(q0) 内存溢出问题

问题描述 java.lang.OutOfMemoryError: CG(q0) [javelin/java/JavaScope._resolve([Ljavelin/java/ast/NameNode;II)Ljava/lang/Object;] JVM@cgFail (src/jvm/code/codemanagerat javelin.java.JavaScope.resolve(JavaScope.java:1454)at javelin.java.JavaScope.resolveTyp

springmvc 实现文件下载 出现异常java.lang.OutOfMemoryError: Java heap space

问题描述 springmvc 实现文件下载 出现异常java.lang.OutOfMemoryError: Java heap space 网上找解决方案,一般都是tomcat中添加-Xms256m -Xms512m等配置,但是不行啊. 我的是MyEclipse里的tomcat. 下载20M(包括)以内的文件没问题,超过就会报异常,有什么解决办法吗? 还有是不是请求下载文件时,服务器会把文件全部装入内存再发过来,还是分成多个部分发送,超过内存大小的文件如何发送呢? ** --异常信息 ** ty

当tomcat报:java.lang.OutOfMemoryError: Java heap space

问题描述 我要导出一个10W条记录的文件,但是tomcat后台报java.lang.OutOfMemoryError:Javaheapspace异常我用已经用了两种方法不行1./tomcat/bin/catalina.bat加上下面的命令:在remGuessCATALINA_HOMEifnotdefined这句话的下面加setJAVA_OPTS=-Xms32m-Xmx256m2.修改TOMCAT_HOME/bin/catalina.sh在「echo"UsingCATALINA_BASE:$CAT

基于Java内存溢出的解决方法详解_java

一.内存溢出类型1.java.lang.OutOfMemoryError: PermGen spaceJVM管理两种类型的内存,堆和非堆.堆是给开发人员用的上面说的就是,是在JVM启动时创建:非堆是留给JVM自己用的,用来存放类的信息的.它和堆不同,运行期内GC不会释放空间.如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将context更改

java.lang.OutOfMemoryError: unable to create new native thread这个异常怎么解决?

问题描述 2011-3-1516:39:49org.apache.catalina.core.StandardWrapperValveinvoke严重:Servlet.service()forservletactionthrewexceptionjava.lang.OutOfMemoryError:unabletocreatenewnativethreadatjava.lang.Thread.start0(NativeMethod)atjava.lang.Thread.start(Unknown

java.lang.OutOfMemoryError 错误整理及解决办法_java

java.lang.OutOfMemoryError处理错误 java.lang.OutOfMemoryError异常解决方法 原因: 常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收: 3.代码中存在死循环或循环产生过多重复的对象实体: 4.使用的第三方软件中的BUG: 5.启动参数内存值设定的过小: 常见错误提示: 1.tomcat:java.lang.OutOfMemoryError: Perm

byte-java 上传大文件(1G)报错 java.lang.OutOfMemoryError

问题描述 java 上传大文件(1G)报错 java.lang.OutOfMemoryError java.lang.OutOfMemoryError: Java heap space java.util.Arrays.copyOf(Arrays.java:2271) java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113) java.io.ByteArrayOutputStream.ensureCapacity(Byt