java - JBoss EAP 7.0.0 OutOfMemoryError: 超出 GC 开销限制
问题描述
我在 JBoss EAP 7.0.0 中部署 WAR 时遇到问题。这场战争基于一个 Spring 应用程序。
在部署和删除 WAR 3 或 4 次后,我收到 OutOfMemoryError 异常:
17:02:37,643 ERROR [stderr] (Thread-223) Exception in thread "Thread-223" java.lang.OutOfMemoryError: Java heap space
17:02:37,645 ERROR [stderr] (Thread-223) at io.netty.util.internal.PlatformDependent.allocateUninitializedArray(PlatformDependent.java:189)
17:02:37,645 ERROR [stderr] (Thread-223) at io.netty.buffer.PoolArena$HeapArena.newByteArray(PoolArena.java:676)
17:02:37,645 ERROR [stderr] (Thread-223) at io.netty.buffer.PoolArena$HeapArena.newChunk(PoolArena.java:686)
17:02:37,646 ERROR [stderr] (Thread-223) at io.netty.buffer.PoolArena.allocateNormal(PoolArena.java:244)
17:02:37,646 ERROR [stderr] (Thread-223) at io.netty.buffer.PoolArena.allocate(PoolArena.java:226)
17:02:37,646 ERROR [stderr] (Thread-223) at io.netty.buffer.PoolArena.allocate(PoolArena.java:146)
17:02:37,646 ERROR [stderr] (Thread-223) at io.netty.buffer.PooledByteBufAllocator.newHeapBuffer(PooledByteBufAllocator.java:307)
17:02:37,647 ERROR [stderr] (Thread-223) at io.netty.buffer.AbstractByteBufAllocator.heapBuffer(AbstractByteBufAllocator.java:162)
17:02:37,647 ERROR [stderr] (Thread-223) at io.netty.buffer.AbstractByteBufAllocator.heapBuffer(AbstractByteBufAllocator.java:153)
17:02:37,647 ERROR [stderr] (Thread-223) at io.netty.buffer.AbstractByteBufAllocator.ioBuffer(AbstractByteBufAllocator.java:135)
17:02:37,648 ERROR [stderr] (Thread-223) at io.netty.channel.DefaultMaxMessagesRecvByteBufAllocator$MaxMessageHandle.allocate(DefaultMaxMessagesRecvByteBufAllocator.java:80)
17:02:37,648 ERROR [stderr] (Thread-223) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:122)
17:02:37,648 ERROR [stderr] (Thread-223) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:644)
17:02:37,648 ERROR [stderr] (Thread-223) at io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:544)
17:02:37,649 ERROR [stderr] (Thread-223) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:498)
17:02:37,649 ERROR [stderr] (Thread-223) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
17:02:37,649 ERROR [stderr] (Thread-223) at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
17:02:37,649 ERROR [stderr] (Thread-223) at java.lang.Thread.run(Thread.java:748)
17:04:30,709 ERROR [stderr] (MyThread_ViewsDtoGeneration) Exception in thread "MyThread_ViewsDtoGeneration" java.lang.OutOfMemoryError: GC overhead limit exceeded
17:04:30,711 ERROR [stderr] (MyThread_ViewsDtoGeneration) at java.util.Arrays.copyOfRange(Arrays.java:3664)
17:04:30,711 ERROR [stderr] (MyThread_ViewsDtoGeneration) at java.lang.String.<init>(String.java:207)
17:04:30,711 ERROR [stderr] (MyThread_ViewsDtoGeneration) at java.lang.StringBuilder.toString(StringBuilder.java:407)
17:04:30,712 ERROR [stderr] (MyThread_ViewsDtoGeneration) at org.hibernate.dialect.Dialect.applyLocksToSql(Dialect.java:1439)
17:04:30,712 ERROR [stderr] (MyThread_ViewsDtoGeneration) at org.hibernate.loader.plan.exec.query.internal.SelectStatementBuilder.toStatementString(SelectStatementBuilder.java:222)
17:04:30,712 ERROR [stderr] (MyThread_ViewsDtoGeneration) at org.hibernate.loader.plan.exec.internal.AbstractLoadQueryDetails.generate(AbstractLoadQueryDetails.java:183)
17:04:30,712 ERROR [stderr] (MyThread_ViewsDtoGeneration) at org.hibernate.loader.plan.exec.internal.EntityLoadQueryDetails.<init>(EntityLoadQueryDetails.java:90)
17:04:30,712 ERROR [stderr] (MyThread_ViewsDtoGeneration) at org.hibernate.loader.plan.exec.internal.BatchingLoadQueryDetailsFactory.makeEntityLoadQueryDetails(BatchingLoadQueryDetailsFactory.java:61)
...
我使用 VisualVM 分析服务器中发生的情况,我意识到每次部署中加载的类的数量都增加了(没关系),但是当我删除应用程序时它并没有减少。
此外,线程的数量似乎每次都在增加,但从未减少在部署期间创建的相同数量的线程。
我真的不知道发生了什么。我在 Tomcat 8.5.24 中测试了相同的应用程序,但我从未收到此错误,这让我认为该错误不在我的应用程序中,但谁知道...
任何想法?谢谢!
解决方案
推荐阅读
- ios - Xcode 10.3 中的 iOS 9 模拟器缺失
- flutter - Flutter Provider 重建不必要的小部件
- php - 无法使用 PHP 将数据插入 Postgres 数据库
- python - Tornado autoreload does not pass sys args
- selenium - Having same protractor version in package.json installing different chrome driver versions?
- python - 我如何在 Django 管理员上注册一个用于上传文件的字段
- javascript - Route does not work on live server but it work on localhost
- c++ - Why does the raspberrypi not send the requested serial output?
- python - Module attribute import
- javascript - 具有数据库关系的 Django 的 ModelForm 中的 MultichoiceField