Tomcat 8 metaspace OutOfMemory issue



我将tomcat 8与JDK 8一起使用。Metaspace设置为1GB,我觉得这足够了,我会遇到OutofMemoryError例外。我尝试检查类(sslengineimpl.java:1796)的类别,以获取引起这一点的原因,但似乎错误的行似乎并未指任何类的负载。有人可以帮忙吗?

[http-nio-8202-exec-2] org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun 
 java.lang.OutOfMemoryError: Metaspace
    at sun.security.ssl.SSLEngineImpl.recvAlert(SSLEngineImpl.java:1796)
    at sun.security.ssl.SSLEngineImpl.readRecord(SSLEngineImpl.java:1083)
    at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:907)
    at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781)
    at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
    at org.apache.tomcat.util.net.SecureNioChannel.handshakeUnwrap(SecureNioChannel.java:350)
    at org.apache.tomcat.util.net.SecureNioChannel.handshake(SecureNioChannel.java:208)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1496)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

来自docs

线程线程中的例外:java.lang.outofmemoryerror: Metaspace原因:Java类元数据(虚拟机内部 Java类的表示(在本机内存中分配 称为Metaspace(。当类元数据梅斯帕斯筋疲力尽时, getaspace的例外是" java.lang.outofmemoryerror的细节 扔。可用于类元数据的Metaspace量是 命令上指定的参数有限 线 。抛出一个例外,并带有详细信息maxmetaspaceSize如果 超出了类元数据所需的本机记忆量 .metaspacejava.lang.outofmemoryerror诉讼:如果它的maxmetaspaceSize为 设置在命令行,增加其值。分配的Metaspaceis 从与Java堆相同的地址空间。减少大小 Java Heap Metaspace增加了可用的空间。这个权衡 仅在Java堆中有额外的自由空间时才保持。下列的 "不互换空间"请参考细节的"治疗" 消息。

在Java 8及以后,我们可以使用以下命令设置Metaspace的初始和最大大小:

-XX:MetaspaceSize=N  - sets the initial (and minimum size) of the Metaspace.
-XX:MaxMetaspaceSize=N  - sets the maximum size of the Metaspace.

最新更新