我将tomcat 8与jdk 8一起使用。 元空间设置为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)
答案 0 :(得分:0)
来自文档
线程thread_name中的异常:java.lang.OutOfMemoryError: Metaspace原因:Java类元数据(虚拟机内部 Java类的表示形式)分配在本机内存中(此处 称为元空间)。当类元数据元空间用尽时, MetaSpace的异常“” java.lang.OutOfMemoryError的详细信息是 抛出。可用于类元数据的元空间为 MaxMetaSpaceSize受命令上指定的参数限制 线。如果发生异常,则会抛出详细信息MaxMetaSpaceSize的异常。 类元数据所需的本机内存量已超出 .MetaSpacejava.lang.OutOfMemoryError操作:如果MaxMetaSpaceSize为 在命令行上设置,增加其值。已分配MetaSpace 来自与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.