У меня есть приложение весенней загрузки, и я продолжаю получать предупреждения памяти R14 на героку. Я полагаю, что проблема заключается в нечастой сборке мусора и размере кучи, поскольку ручной запуск сборщика мусора через постоянные промежутки времени делает проблему исчезающей даже при стресс-тестировании с виртуальными пользователями. Таким образом, мой следующий шаг состоял в том, чтобы обеспечить более чистое решение, оптимизируя jvm вместо ручного запуска gc. Я уменьшил размер кучи по умолчанию с 300 до 250 м и установил порог старшего поколения на 50%. С этой настройкой на моей локальной машине использованная куча была между 50-70 МБ, что должно быть в порядке. Затем я попытался установить настройки jvm на heroku. Видя параметры по умолчанию, когда я не представил procfile:

web:  java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/*.jar

Я добавил желаемые параметры примерно так:

web: java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/*.jar -Xms64m -Xmx250m -XX:CMSInitiatingOccupancyFraction=50 -XX:+PrintGCDetails -Xlog:gc

Однако это не сработает.

Во время запуска я получаю это сообщение:

Starting process with command `java -Dserver.port=22382 $JAVA_OPTS -jar build/libs/*.jar -Xms64m -Xmx250m -XX:CMSInitiatingOccupancyFraction=50 -XX:+PrintGCDetails -Xlog:gc`

Setting JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will override them.

Picked up JAVA_TOOL_OPTIONS: -Xmx300m -Xss512k -Dfile.encoding=UTF-8 

Я не вижу никаких сообщений сборщика мусора, и ошибка R14 вернулась.

0