Sobes.tech
Назад к вопросам
Senior
4

Сервис каждые несколько часов падает с OutOfMemoryError. С чего начнёшь разбор проблемы?

Компании, где спрашивали
ТБанк

Ответ от нейросети

sobes.tech AI

Первым шагом при разборе OutOfMemoryError в Java-сервисе стоит собрать и проанализировать heap dump — снимок состояния памяти в момент ошибки. Это поможет понять, какие объекты занимают большую часть памяти и не освобождаются.

Далее стоит проверить настройки JVM, особенно параметры, связанные с размером кучи (heap size), и убедиться, что они соответствуют нагрузке и ресурсам сервера.

Также полезно включить сбор статистики по сборкам мусора (GC logs) для анализа частоты и эффективности очистки памяти.

В коде стоит искать потенциальные утечки памяти: например, коллекции, которые постоянно растут, кеши без ограничений, статические ссылки на объекты, слушатели, которые не удаляются.

Пример запуска JVM с параметрами для сбора heap dump и GC логов:

java -Xmx2g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dumps \
     -Xlog:gc*:file=/path/to/gc.log:time,uptime,level,tags
     -jar yourapp.jar

После сбора heap dump можно проанализировать его с помощью инструментов, например, VisualVM, Eclipse MAT или YourKit.