日期:2014-05-19  浏览次数:20824 次

weblogic 内存溢出
服务器:windows Server2003 CPU E3400 @2.60GHZ 4.96GB内存
应用服务器:weblogic 9.2

在文件setDomainEnv.cmd设置
set MEM_ARGS=-Xms1024m -Xmx1700m
启动出现:
Java code
Error occurred during initialization of VM
Could not reserve enough space for object h
Could not create the Java virtual machine.


-Xmx为1500 没问题
--------------------------------------------
奇怪4.9G 内存 竟然不能设置-Xmx2000m

------解决方案--------------------
JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制
------解决方案--------------------
32位的操作系统上好像最大值是:1.5G。64位的没有限制。
------解决方案--------------------
32位下jvm理论上是可以支持到2048m的,不过这个要依赖于系统。

所以,我们安全的做法是:

先用一个command line来测试一下你的系统理论上可以支持到多大的JVM。

打开run->cmd

运行:

java -version -Xms1700m -Xmx1700m

如果能正确得到java 版本的信息输出,那么你就可以使用这个Xmx,但是这只适合于TOMCAT。

Weblogic还有一些自己的内存管理机制,并不是说你给了1800m就可以支持,它还会开启一些自己的进程在jvm里。

因此,你的weblogic无法支持1700只能到1500,1600很正常。

32位机下,要使用更多的内存来扩展你的JVM性能,应该用weblogic垂直集群,及多个domain协作。

比如说你有16GB内存,可以开3个DOMAIN,每个1500,协作起来就可以达到3*1500m的工作量。

因此,一般JAVA/J2EE应用在客户条件的允许下,要首推64位。这样你的JVM是无任何限制的。
当然,WEBLOGIC也需要用相应的64位
------解决方案--------------------
1700不行,1500可以,那是因为JVM只开了1500,你不能开的比JVM大,意思是你的系统只开辟了1G内存空间,你非要给你的软件开2个G的,当然不行了,与你机器内存大小没关系的。