我在jdk 8中使用tomcat 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)发布于 2019-05-11 15:19:43
从医生那里
线程thread_name中的异常: java.lang.OutOfMemoryError: Metaspace原因: Java元数据(虚拟机内部表示Java类)被分配到本机内存中(这里称为metaspace)。当类元数据元数据耗尽时,metaspace异常将抛出“java.lang.OutOfMemoryError”的详细信息。类元数据可用的元空间数量受命令行上指定的参数的MaxMetaSpaceSize限制。如果类元数据所需的本机内存量超过.MetaSpacejava.lang.OutOfMemoryError操作,则抛出details MaxMetaSpaceSize异常:如果在命令行上设置了MaxMetaSpaceSize,则增加其值。从与Java堆相同的地址空间分配元空间。减少Java堆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.https://stackoverflow.com/questions/56091525
复制相似问题