У меня есть приложение весенней загрузки, и я продолжаю получать предупреждения памяти 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 вернулась.