Какова возможная причина этого исключения пространства кучи Java?
На первый взгляд, объяснение простое. JVM исчерпала пространство кучи, и GC не может освободить достаточно места для продолжения.
Но что заставило JVM войти в это состояние?
Есть несколько возможных объяснений, но они в основном делятся на три класса:
Ваше приложение имеет утечку памяти.
Повторные развертывания вызывают утечку памяти.
Нет утечек памяти, но иногда ваше приложение получает запрос, который просто требует слишком много памяти.
Должен ли я перезапускать сервер между следующими развертываниями?
Это может помочь, если развертывания вызывают утечки. Если нет, то не будет.
Есть ли какая-нибудь команда для очистки кучи?
Нет команды, которая сделает это. JVM уже запустит «полный» сборщик мусора, прежде чем выдать OOME.
Если я правильно понимаю, увеличение аргумента -Xmx не поможет. Это только задержит появление исключения. Правильно?
Это зависит. Если основной причиной является № 3 выше, то увеличение размера кучи может решить проблему. Но если основной причиной является # 1 или # 2, то настройка размера кучи (в лучшем случае) заставит JVM дольше выживать между сбоями.
Я рекомендую начать с трактовки этого явления как «нормальной» (причина № 1) утечки памяти и использовать профилировщик памяти для выявления и устранения утечек, которые могут возникнуть со временем.
Если / когда вы можете окончательно устранить причину # 1, рассмотрите другие.