gpt4 book ai didi

java - Arquillian 中的 OutOfMemoryError

转载 作者:行者123 更新时间:2023-11-29 03:01:29 25 4
gpt4 key购买 nike

我想使用 Arquillian 部署一个大约 70MB 的 EAR,但无论我做什么,我都会得到:

Exception in thread "management-client-thread 1-1" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3236)
at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113)
at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:140)
at org.jboss.as.protocol.StreamUtils.copyStream(StreamUtils.java:52)
at org.jboss.as.controller.client.impl.InputStreamEntry$InMemoryEntry.initialize(InputStreamEntry.java:76)
at org.jboss.as.controller.client.impl.AbstractModelControllerClient$ReadAttachmentInputStreamRequestHandler$1.execute(AbstractModelControllerClient.java:193)
at org.jboss.as.protocol.mgmt.AbstractMessageHandler$2$1.doExecute(AbstractMessageHandler.java:283)
at org.jboss.as.protocol.mgmt.AbstractMessageHandler$AsyncTaskRunner.run(AbstractMessageHandler.java:504)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at org.jboss.threads.JBossThread.run(JBossThread.java:122)

我试过:

EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class);
ear.addAsModules(Maven.resolver().loadPomFromFile("pom.xml")
.resolve("org.acme:module1:war:?","org.acme:module2","org.acme:module3:war:?")
.withoutTransitivity().asFile());

然后

EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class);
ear.addAsModules(new File("lib/module1-4.4.2.war"));
ear.addAsModules(new File("lib/module2-3.7.0.jar"));
ear.addAsModules(new File("lib/module3-3.7.war"));

然后

EnterpriseArchive ear = ShrinkWrap.createFromZipFile(EnterpriseArchive.class, new File(
"../org.acme.project.ear/target/org.acme.project.ear.ear"));

这带来了连 Google 都不知道的异常(java.lang.UnsupportedOperationException:在 org.acme.project.ear 中找到多个 WebArchives。无法确定要丰富的内容),所以我添加了:

ear.delete("/module1-4.4.2.war");
// AND / OR
ear.delete("/module3-3.7.war");

哪个(取决于我删除的模块)要么让我回到OutOfMemoryError,要么回到一个异常,因为现在 EAR 的 application.xml 没有了'无法使用新的模块列表(并且由于 application.xml 是由 Maven 动态创建的,现在我可以将修改后的文件放入我的 Arquillian 测试工具中)。

在某处我摆弄了 arquillian.xml 中的 XmsXmx 属性:

<container qualifier="jboss" default="true">
<configuration>
<property name="javaVmArguments">-Xms512m -Xmx1024m</property>
</configuration>
</container>

问题的关键似乎是这个 50MB 的 WAR,我觉得它没有那么大,但显然是这样。我该怎么做才能让我的 EAR 正常工作?

最佳答案

关于错误 java.lang.UnsupportedOperationException: Multiple WebArchives found in org.acme.project.ear。无法确定要丰富哪些内容:

Arquillian 必须向部署添加一些库(使用 @Deployment(testable = false) 时除外)。

  • 如果 ear 不包含任何 web 模块,它将添加一个包含所需库的新 test.war 并将从此上下文触发测试(如果使用 servlet 协议(protocol))。
  • 如果 ear 只包含一个 Web 模块,它将搭载这个模块并将所需的资源添加到该模块,并在该单个 Web 模块的上下文中执行测试。
  • 现在有了多个网络模块,Arquillian 不知道要使用哪个网络模块,也不会添加额外的模块。相反,在这种情况下,您必须将其中一个网络模块标记为 Testable 网络模块。

要将 module1 标记为可测试存档,您可以这样做:

EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class);
ear.addAsModules(
org.jboss.arquillian.container.test.api.Testable.archiveToTest(
ShrinkWrap.createFromZipFile(WebArchive.class, new File("lib/module1-4.4.2.war"));
ear.addAsModules(new File("lib/module2-3.7.0.jar"));
ear.addAsModules(new File("lib/module3-3.7.war"));

注意:事实上,如果 OOM 不会首先发生,您也应该在其他情况下看到此错误。

关于 OOM 我认为您应该增加测试进程的堆大小,arquillian.xml 中配置的堆大小将定义 JBoss 服务器的堆大小。但是 OOM 甚至在应用程序部署之前就已经发生了。如果您使用 Maven,这可能对您有所帮助:https://stackoverflow.com/a/16969122/2779488

关于java - Arquillian 中的 OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34590312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com