提问者:小点点

JBoss6无法在JDK7的Windows(32位)机器上启动


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.SOAPConnectionFactor‌​yImpl 
-Djavax.xml.soap.SOAPFactory=org.apache.axis.soap.SOAPFactoryImpl"

共3个答案

匿名用户

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时会遇到很多问题。