JBoss不会从我当前的配置开始。我收到错误:
初始化VM时出错无法为对象堆保留足够的空间错误:无法创建Java虚拟机错误:发生了致命异常程序将退出按任意键继续…
JBoss使用的JAVA_OPTS是:
-client
-Dprogram.name=standalone.bat
-Xms128
-Xmx2G
-XX:MaxPermSize=256M
-Djava.net.preferIPv4Stack=true
-Djboss.modules.system.pkgs=org.jboss.byteman
-Xms1024m
-Xmx2048m
-XX:PermSize=32m
-XX:MaxPermSize=512m
-Xss2m
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
-Djavax.xml.soap.MessageFactory=org.apache.axis.soap.MessageFactoryImpl
-Djavax.xml.soap.SOAPConnectionFactory=org.apache.axis.soap.SOAPConnectionFactoryImpl
-Djavax.xml.soap.SOAPFactory=org.apache.axis.soap.SOAPFactoryImpl"
从JAVA_OPTS
中,您将最大堆设置为2048m(2G),这在Win32上不起作用-是-Xmx2048m
选项控制这一点(似乎设置了两次)。
要在Win32上运行,您应该调整-Xms
和-Xmx
选项。在普通JBoss安装中(至少在我的JBoss安装中),这两个选项都设置在标准化. conf.bat
中。尝试将两者都设置为1024m
以开始,如果您仍然有问题,请减少。
您也可能想要关闭-XX: MaxPermSize(同样设置了两次)。256m
可能会起作用,但如果不能,请尝试使用128m
。
要重用我的部分答案(关于Tomcat,但适用于JBoss或任何Java进程):
WindowsOS将32位进程的内存分配限制为总共2 GiB(默认情况下)。
[您只能]分配大约1.5 GiB的堆空间,因为还有其他内存分配给进程(JVM/库开销、perm gen空间等)。
为什么32位Windows施加了2 GB的进程地址空间限制,而64位Windows施加了4GB的限制?
其他现代操作系统[咳嗽Linux]允许32位进程使用所有(或大部分)4 GiB可寻址空间。
也就是说,64位WindowsOS可以配置为将32位进程的限制增加到4 GiB(32位上为3 GiB):
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366778(v=vs.85). aspx
然而[正如其他人所说],最好的解决方案是在64位OS中使用64位JVM。太字节堆任何人?: D
因此,您将无法在Java选项中设置-Xmx2048m
,但-Xmx1024m
将起作用-接近1.5 GiB的值也应如此(但确切数字有所不同)。
你应该使用64位OS。在使用jboss6, jdk1.7等32位OS时会遇到很多问题。