Развертывание весеннего загрузочного приложения в облачном литейном цехе не удается из-за проблемы с памятью JVM - PullRequest
0 голосов
/ 08 мая 2019

Развертывание приложения весенней загрузки в Pivotal Cloud Foundry завершается с ошибкой ниже.Предел для экземпляра был установлен на 2 ГБ, а затем 4 ГБ.Локально приложение запускается нормально с размером кучи 2ГБ.Сбой приложения во время инициализации менеджера кэша.Есть идеи, что может быть причиной?Не знаете, какую роль играет терракота в литейном облаке и что еще искать?

 2019-05-07T19:24:53.39+0530 [APP/PROC/WEB/0] OUT     at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
   2019-05-07T19:24:53.39+0530 [APP/PROC/WEB/0] OUT Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.cache.CacheManager]: Factory method 'cacheManager' threw exception; nested exception is org.ehcache.StateTransitionException: Cache '<name hidden>' creation in EhcacheManager failed.
....
 Caused by: java.lang.IllegalArgumentException: An attempt was made to allocate more off-heap memory than the JVM can allow. The limit on off-heap memory size is given by the -XX:MaxDirectMemorySize command (or equivalent).
   2019-05-07T19:15:13.15+0530 [APP/PROC/WEB/0] OUT     at org.terracotta.offheapstore.paging.UpfrontAllocatingPageSource.bufferAllocation(UpfrontAllocatingPageSource.java:564)
   2019-05-07T19:15:13.15+0530 [APP/PROC/WEB/0] OUT     at org.terracotta.offheapstore.paging.UpfrontAllocatingPageSource.lambda$allocateBackingBuffers$1(UpfrontAllocatingPageSource.java:513)
   2019-05-07T19:15:13.15+0530 [APP/PROC/WEB/0] OUT     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
   2019-05-07T19:15:13.15+0530 [APP/PROC/WEB/0] OUT     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
   2019-05-07T19:15:13.15+0530 [APP/PROC/WEB/0] OUT     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
   2019

РЕДАКТИРОВАТЬ: исправлено путем удаления конфигурации ehcache вне кучи: maxBytesLocalOffHeap

1 Ответ

1 голос
/ 08 мая 2019

По умолчанию пакет сборки Java ограничивает различные области памяти JVM. Это делается для того, чтобы убедиться, что ваши Java-приложения не превышают лимит памяти контейнера, что может привести к сбою приложения.

Ваше приложение пытается создать объем прямой памяти, превышающий предел, установленный в сборочном пакете Java. Когда я пишу это, Java buildpack устанавливает -XX:MaxDirectMemorySize=10M.

Чтобы это работало, вам просто нужно установить переменную окружения, либо в вашем manifest.yml, либо с помощью cf set-env с именем JAVA_OPTS, а содержимое должно включать -XX:MaxDirectMemorySize=XXM, где XX - большее значение что вы хотите использовать.

Java buildpack увидит, когда вы настроите параметры памяти, подобные этой, и уменьшит размер других областей памяти для компенсации. Если вы пытаетесь использовать большой объем прямой памяти, это может привести к тому, что вам не хватит памяти для других регионов. Если это произойдет, вам потребуется увеличить общий лимит памяти для вашего приложения.

https://github.com/cloudfoundry/java-buildpack/blob/master/docs/jre-open_jdk_jre.md#java-options

Надеюсь, это поможет!

...