webLogic内存溢出解决方案

时间:2021-02-27 20:58:00

初次接触weblogic便被它强大的功能所折服。

关于如何安装和配置weblogic度娘上有很多的介绍,这里就不再赘述了。

可以参考以下链接:

http://blog.csdn.net/hackage4619/article/details/55189106

--------------------------------------------------------------------------------------------------常见的内存溢出介绍----------------------------------------------------------------------------------------------------------

导致OutOfMemoryError异常的常见原因有以下几种:

1. 内存中加载的数据量过于庞大,如一次从数据库取出过多数据;

2. 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;

3. 代码中存在死循环或循环产生过多重复的对象实体;

4. 使用的第三方软件中的BUG;

5. 启动参数内存值设定的过小;

此错误常见的错误提示:

1. tomcat:java.lang.OutOfMemoryError: PermGen space

2. tomcat:java.lang.OutOfMemoryError: Java heap space

3. weblogic:Root cause of ServletException java.lang.OutOfMemoryError

4. resin:java.lang.OutOfMemoryError

5. java:java.lang.OutOfMemoryError

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


正餐来了,当安装和配置完weblogic以后满怀欣喜的部署了项目想要一睹芳容,尼玛怎么也跑不起来,控制台报错如下:

java.lang.OutOfMemoryError: PermGen space

这个错误很明显是内存溢出,通过一番查找后终于找到了修改的地方,因为使用的是myeclipse继承weblogic,解决方法如下:



webLogic内存溢出解决方案


知其然必要知其所以然,下面介绍下配置参数的一些含义:

-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
-vmargs 说明后面是JVM的参数,所以后面的其实都是JVM的参数了

-Xms128m JVM初始分配的堆内存
-Xmx512m JVM最大允许分配的堆内存,按需分配
-XX:PermSize=64M JVM初始分配的非堆内存
-XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配


那么问题又来了,什么是堆什么是非堆呢?

------------------------------------------------初识java内存概念--------------------------------------------------------------------

下图是之前自己学习时整理的笔记,讲的比较浅显。

什么是栈?什么是堆?什么是方法区?

答:

栈:用于存放局部变量

堆:存放new出来的对象

方法区:存放类的信息(代码)、static变量、常量池等   //注:方法区也是属于堆的一部分

解析Student s1=new Student()在内存中的分配过程

1jvm执行到Student,首先在堆中查找是不是有这个类的信息,没有就通过类加载器把这个类的信息(属性和方法等)加载进堆中。

2、执行Student s1 在栈中分配空间存放变量s1。(此时这个变量并没有指向其他内存空间)

3、执行new Student(),在堆中的方法区外分配一片内存存放new出来的对象信息(对象的方法只是存放地址指向方法区里面的方法)

4、执行=赋值,将new出来的对象的内存空间的首地址赋给s1

内存分析示意图:

webLogic内存溢出解决方案

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


------------------------------------------------------JVM内存进阶-------------------------------------------------------------------

现在我们队堆的概念有了一个大概的了解,那么回到上面的问题,什么是非堆呢?

其实这里是个叫法的不同,非堆其实指的就是上面的方法区。

关于这一部分的内容,小白就不说自己的感悟了(怕误导大家),在度娘上看了位大神的博客觉得甚是牛逼(ps:虽然我看得一知半解):

附上链接地址:http://www.cnblogs.com/dingyingsi/p/3760447.html

有兴趣的朋友可以看看,说的真的很好。

在这也感谢下这位大牛分享的姿势。。。fuck。。知识。---做人不能太污啊webLogic内存溢出解决方案

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

最后总结:码海无涯,回头也不是岸啊webLogic内存溢出解决方案