Существует несколько шагов, которые можно использовать для определения утечки памяти.
Начните с изменения параметров запуска веб-службы.Добавьте строку -XX:+HeapDumpOnOutOfMemoryError
, которая будет захватывать дамп кучи всякий раз, когда jvm встречает исключение OOM.Вы можете использовать эту информацию, чтобы получить хорошее представление о том, какие объекты в памяти занимали всю доступную память.В ожидании репликации OOM вы можете посмотреть на 2-й набор параметров, которые нужно добавить к запуску, в следующем журнале активности GC -XX:+PrintGCDetails -verbose:gc -Xloggc:/log/path/gc.log
.С помощью этих данных вы можете увидеть, происходит ли OOM постепенно или происходит быстро.
Другой путь - использовать такую программу, как VisualVM, которую можно использовать для профилирования веб-службы.Это подключит к вашей работающей JVM (предпочтительно в среде разработки), а затем попытается провести стресс-тестирование, чтобы найти причину проблемы. Попробуйте JMeter, чтобы помочь с стресс-тестированием.VisualVM находится в папке JAVA_HOME / bin (версии 6 и выше)
. Это также может быть случай, когда речь идет не об утечке памяти, а о большей нагрузке на стороне клиента, чем ожидалось.Посмотрите на настройку параметров запуска, чтобы обеспечить больше памяти (-Xms
и -Xmx
)
Если ваш клиент не может сказать вам параметры, которые он передал до возникновения проблем, вам придется провести небольшое исследованиедо тех пор, пока вы не найдете больше информации.
Даниэль уже рассмотрел jmap в своем ответе, поэтому я не буду вдаваться в подробности