jboss7堆大小无法分配

时间:2015-08-17 06:56:14

标签: jboss7.x

Exception in thread "management-client-thread 1-3" java.lang.OutOfMemoryError: J
ava heap space (failed to allocate 536870928 bytes)
        at java.util.Arrays.copyOf(Arrays.java:2786)
        at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
        at org.jboss.as.protocol.StreamUtils.copyStream(StreamUtils.java:49)
        at org.jboss.as.controller.client.impl.AbstractModelControllerClient$Rea
dAttachmentInputStreamRequestHandler.copyStream(AbstractModelControllerC
va:226)
at org.jboss.as.controller.client.impl.AbstractModelControllerCl
dAttachmentInputStreamRequestHandler$1.execute(AbstractModelControllerCl
a:202)
at org.jboss.as.protocol.mgmt.AbstractMessageHandler$2$1.doExecu
actMessageHandler.java:287)

2 个答案:

答案 0 :(得分:3)

好吧,当我看到这样的事情时,我的第一个倾向是仔细理解堆栈痕迹。

你注意到java.lang.OutOfMemoryError了吗?这是一个相当好的线索。值得庆幸的是,它确切地泄露了问题所在:

  

无法分配536870928个字节

运行时系统试图分配一个大小为536870928字节的内存区域.~0.5 GB。

如果您的应用程序需要立即创建单个巨大对象或大量对象的集合,那么您可能需要更改Java程序的调用,以便堆可以容纳这样的分配。

否则,如果这个大小的分配是意外的,我会检查你的程序中可能已经为这样一个巨大的区域提出了逻辑错误。一个嫌疑人可能是阵列的分配,其尺寸未正确计算或限制。

答案 1 :(得分:0)

您可以发布您分配的当前堆大小吗? JVM默认为512M,这对于实际应用程序来说并不多。然后检查您的应用程序需要更多空间。

大卫的答案也有些不正确。它不是一个需要0.5GB的对象。当JVM用尽堆空间时,它会要求操作系统使用自己的算法扩展堆内存。当它无法从操作系统获得那么多空间时,您会收到您所看到的错误。有关详细信息,请参阅此博客。 http://www.waratek.com/blog/introduction-to-real-world-jvm-memory-utilisation/