当前位置:编程学习 > JAVA >>

用weblogic在服务器上部署项目时,因访问人数增多,出现了一个 java.lang.OutOfMemoryError: PermGen space 的错

报错内容Root cause of ServletException. 
java.lang.OutOfMemoryError: PermGen space 


报错后我按照网上的部分解决方案,作了如下修改,红色部分的数值是我在原来的基础上修改的,服务器机身内存是16G,改了之后还是报错。明天服务就要正式上线了,请教高手这个问题如何解决。
修改文件是:D:\bea\weblogic92\common\bin\commEnv.cmd
:bea
if "%PRODUCTION_MODE%" == "true" goto bea_prod_mode
set JAVA_VM=-jrockit
set MEM_ARGS=-Xms128(768)m -Xmx256(1024)m
set JAVA_OPTIONS=%JAVA_OPTIONS% -Xverify:none
goto continue
:bea_prod_mode
set JAVA_VM=-jrockit
set MEM_ARGS=-Xms128(768)m -Xmx256(1024)m
goto continue


:sun
if "%PRODUCTION_MODE%" == "true" goto sun_prod_mode
set JAVA_VM=-client
set MEM_ARGS=-Xms32(768)m -Xmx200(1024)m -XX:MaxPermSize=128(256)m -XX:+UseSpinning
set JAVA_OPTIONS=%JAVA_OPTIONS% -Xverify:none
goto continue
:sun_prod_mode
set JAVA_VM=-server
set MEM_ARGS=-Xms32(768)m -Xmx200(1024)m -XX:MaxPermSize=128(256)m -XX:+UseSpinning
goto continue

:continue weblogic 内存溢出 JVM PermGen space  服务器 --------------------编程问答-------------------- 扩大内存只是一种缓解的手段。

如果程序存在漏洞,比如资源未释放,或者超大对象的使用(例如Map或List的规模非常大),还是可能会出现这个问题的。

如果还有时间,可以确认下是哪个地方的对象超大了。

我们项目之前碰到过超大Map的使用情况,解决方法就是每次使用完map,手动clear()一下。 --------------------编程问答--------------------
引用 1 楼 oh_Maxy 的回复:
扩大内存只是一种缓解的手段。

如果程序存在漏洞,比如资源未释放,或者超大对象的使用(例如Map或List的规模非常大),还是可能会出现这个问题的。

如果还有时间,可以确认下是哪个地方的对象超大了。

我们项目之前碰到过超大Map的使用情况,解决方法就是每次使用完map,手动clear()一下。


确实,申请更大的内存也是治标不治本,应该是你的程序某些地方资源没有释放,或者初始化得不合理,这是一个隐患了,小的时候没问题,量一激增就出现问题了
补充:Java ,  Web 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,