Java SpringMVC Ошибка из памяти

#java #spring #tomcat

#Ява #весна #кот

Вопрос:

Мы развернули файл java war на сервере, приложение размещено на веб-сервере Tomcat.

При загрузке приложения мы получаем java.lang.Ошибка OutOfMemoryError, из-за которой приложение останавливается.

Мы используем Java версии 8 и Tomcat версии 8.

Прилагаемые сведения об ошибке, пожалуйста, дайте мне знать, если необходимо проверить какую-либо конфигурацию?

  SEVERE [28] org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run Unexpected death of background thread [ContainerBackgroundProcessor[StandardEngine[Catalina]]] java.lang.OutOfMemoryError: GC overhead limit exceeded  
 SEVERE [76] org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun java.lang.ArrayIndexOutofBoundaException: -20 at sun.security.provider.SecureRandom.engineNextBytes(SecureRandom.java:252) at sun.security.provider.NativePRNG$RandomIO.implNextBytes(NativePRNG.java:535) at sun.security.provider.NativePRNG$RandomIO.access$400(NativePRNG.java:331) at sun.security.provider.NativePRNG.engineNextBytes(NativePRNG.java:220) at java.security.SecureRandom.nextBytes(SecureRandom.java:468) at sun.security.util.KeyUtil.checkTlsPreMasterSecretKey(KeyUtil.java:268) at com.sun.crypto.provider.RSACipher.engineUnwrap(RSACipher.java:480) at javax.crypto.Cipher.unwrap(Cipher.java:2553) at sun.security.ssl.RSAKeyExchange$RSAPremasterSecret.decode(RSAKeyExchange.java:185) at sun.security.ssl.RSAC1ientKeyExchange$RSAClientKeyExchangeConsumer.consume(RSAClientKeyExchange.java:285)  at sun.security.ssl.ClientKeyExchange$ClientKeyExchangeConsumer.consume(ClientKeyExchange.java:110) at sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:377) at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)  at sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:968) at sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:955) at java.security.AccessController.doPrivileged(Native Method)  at sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:902) at org.apache.tomcat.util.net.SecureNioChannel.tasks(SecureNioChannel.java:423) at org.apache.tomcat.util.net.SecureNioChannel.handshakeUnwrap(SecureNioChannel.java:483)  at org.apache.tomcat.util.net.SecureNioChannel.handshake(SecureNioChannel.java:238) at org.apache.tomcat.util.net.NioEndpointSocketProcessor.doRun(NioEndpoint.java:1475) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExcutor.java:624)  at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run (TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)  
 java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for lt;0x0000000642344808gt; (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103) at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)  
 https-jsse-nio-8443-exec-71 #120 daemon prio=5 os_prio=0 tid=0x000071509c004000 nid=0x48b1 waiting on condition [0x00007150129f000]  java lang Thread State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) -parking to wait for lt;0x0000000642344808gt; (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java.2039) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue java:442)  at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103) at org apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31) at java.util.concurrent.ThreadPoolExecutor.get.Task(ThreadPoolExecutor.java:1074) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134) at java util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)  at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)  

Комментарии:

1. У меня нет опыта работы с tomcat, но я получаю что-то очень похожее при развертывании war на сервере wildfly (это также исключение OutOfMemoryException). Я думаю, что решение также аналогично, попробуйте найти, как увеличить объем памяти, выделенный для tomcat. Также для меня это происходит, когда я выполняю несколько развертываний/перераспределений, не перезапуская машину, поэтому простой перезапуск машины часто также исправляет это

2. Здесь слишком мало информации. Если вы получаете чрезмерный GC, вы производите слишком много мусора. Так что это должно быть что-то в вашем коде или фреймворке, который вы используете. Но с подробностями здесь ответить на этот вопрос будет невозможно.

3. Спасибо Воин, мы увеличили размер оперативной памяти, проблема решена.