Во время работы в режиме разработки в Play for Scala (2.5.x), после примерно трех часов изменения кода и горячего развертывания, Play зависает с ошибкой java.lang.OutOfMemoryError: Metaspace
.
После некоторых исследований проблема, похоже, заключается в том, что приложение создает экземпляры Java-объектов (таких как фабрики и соединения), о которых Play не знает, и при перезапуске Play эти объекты остаются в памяти, вызывая утечки. Решение состоит в том, чтобы очистить компоненты, когда Play отключается, как объяснено здесь , или уничтожить их после их использования.
Проблема в том, что я убираю все эти объекты и все равно получаю OutOfMemoryError
. Я попытался с помощью Java jconsole
выяснить, какие классы создают утечку и сколько памяти они занимают, но не смог найти много. Есть идеи как справиться с этой ситуацией? Я не хочу просто увеличивать память, не зная, что происходит.
PS: Кажется, это общая проблема, было бы здорово, если бы Play сам предоставил инструменты для ее обнаружения.