Проблема OutOfMemory метапространства Tomcat 8

Я использую tomcat 8 с jdk 8. Метапространство установлено на 1 ГБ, чего мне кажется вполне достаточно, я получаю исключение 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)

person Zizou    schedule 11.05.2019    source источник


Ответы (1)


Из документов

Исключение в потоке thread_name : java.lang.OutOfMemoryError: Metaspace Причина: метаданные класса Java (внутреннее представление виртуальной машины класса Java) размещаются в собственной памяти (здесь называемой метапространством). Когда метапространство метаданных класса исчерпано, создается исключение с MetaSpace деталью " " java.lang.OutOfMemoryError. Объем метапространства, доступного для метаданных класса, равен MaxMetaSpaceSize, ограниченному параметрами, указанными в командной строке. Выдается исключение с подробностями MaxMetaSpaceSize, если превышен объем собственной памяти, необходимой для метаданных класса. .MetaSpacejava.lang.OutOfMemoryError Действие: Если в командной строке установлено значение MaxMetaSpaceSize, увеличьте его значение. Метапространство выделяется из того же адресного пространства, что и куча Java. Уменьшение размера кучи Java MetaSpace увеличивает доступное для него пространство. Этот компромисс возможен только при наличии дополнительного свободного места в куче Java. После «Недостаточно места подкачки» обратитесь к «обработке» подробного сообщения.

В Java 8 и более поздних версиях мы можем установить начальный и максимальный размер метапространства, используя следующие команды:

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

-XX:MaxMetaspaceSize=N  - sets the maximum size of the Metaspace.
person Yugansh    schedule 11.05.2019
comment
Спасибо @Yugansh за ваш ответ. Я видел документацию, и я уже устанавливаю размер метапространства в 1 ГБ, используя XX: MaxMetaspaceSize, но мой вопрос был о том, пытались ли классы tomcat выполнить загрузку, чтобы получить это исключение, потому что я считаю, что 1 ГБ должно быть достаточно - person Zizou; 14.05.2019