li
  当前位置:主页 > 基础知识 > 文章内容
li
java.lang.OutOfMemoryError: allocLargeArray内存溢出
来源: www.ixdba.net  作者: IXDBA.NET官方    时间:2008-04-10   阅读:14  
本文章共2022字,分2页,当前第1页,快速翻页:
 

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

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

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

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

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

IXDBA.NET技术社区

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%的剩余空间。经验之谈:
1ServerJVM最好将-Xms-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx1/3[2]
2.一个GUI程序最好是每1020秒间运行一次GC,每次在半秒之内完成[2]
注意:
1.增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间。并且GC运行时,所有的用户线程将暂停,也就是GC期间,Java应用程序不做任何工作。
2.Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等。
3.Stack的设定
每个线程都有他自己的Stack。

-Xss
每个线程的Stack大小



阅读更多内容1 · 2 · 下一页>>


  上一篇: 网页禁止右键、禁止复制等代码大...   下一篇: Mysql数据库在Linux系统常用命令...
li
 §相关评论  
 热点文章

·RewriteRule重写规则的语法:A
·apache配置文件httpd.conf参数
·Apache的配置文件http.conf参数
·HTTP协议中POST、GET、HEAD等参
·XAMPP命令之LAMPP
·Linux中安装XAMPP(LAMPP)服务器
·网页禁止右键、禁止复制等代码
·java.lang.OutOfMemoryError:
·Mysql数据库在Linux系统常用命
·mysql问答:MySQL数据库连接过多
·MySQL数据库中Show命令的用法
li
 编辑推荐
·RewriteRule重写规则的语法:A
·apache配置文件httpd.conf参数
·Apache的配置文件http.conf参数
·HTTP协议中POST、GET、HEAD等参
·XAMPP命令之LAMPP
·Linux中安装XAMPP(LAMPP)服务器
·网页禁止右键、禁止复制等代码
·java.lang.OutOfMemoryError:
·Mysql数据库在Linux系统常用命
·mysql问答:MySQL数据库连接过多
·MySQL数据库中Show命令的用法
li
 相关篇章
·网页禁止右键、禁止复制等代码大...
·Linux中安装XAMPP(LAMPP)服务器套...
·XAMPP命令之LAMPP
·HTTP协议中POST、GET、HEAD等参数...
·Apache的配置文件http.conf参数含...
·apache配置文件httpd.conf参数详...
·RewriteRule重写规则的语法:Apa...
·Linux操作系统下的"umask"函数详...
·MySQL各存储引擎的区别及其启动方...
·MySQL在网络安全方面采取的主要措...
·Mysql数据库在Linux系统常用命令...
·mysql问答:MySQL数据库连接过多的...
·MySQL数据库中Show命令的用法
·MySQL导入导出工具mysqlimport用...
·mysql数据库源码安装详解
·利用linux rpm方式安装Mysql
·MySQL数据库的基本使用指南
·IBM DB2 9数据库恢复原理介绍
·无法打开网站网页,但是QQ可以登录...
·高性能的 HTTP 和 反向代理 服务...
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接