#java #memory-leaks #aem #heap-memory #heap-dump
#java #утечки памяти #aem #куча-память #куча-дамп
Вопрос:
Я уже добавил аргументы JVM: -XX: HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:Temp Иногда после того, как я увидел созданный JVM файл heapdump, но в файле application error.log нет сообщения об ошибке OutOfMemoryError. Мой вопрос, как возможно, что JVM создает файл дампа кучи без каких-либо ошибок. Это может быть проблема с приложением (AEM) или JVM?
Ответ №1:
Если вашему приложению не хватает памяти, трудно точно сказать, что произойдет.
Если я правильно понимаю, то могло произойти следующее: во время выполнения вашего Java-приложения в какой-то момент один из потоков мог вызвать ошибку OutOfMemoryError.
Если в этом приложении нет оператора catch (для OutOfMemoryError, Error, Throwable) или какого-либо другого механизма, например: https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#setDefaultUncaughtExceptionHandler(java.lang.Нитки.UncaughtExceptionHandler), который регистрируется в вашем файле журнала приложения, вы можете его не увидеть.
Однако может случиться так, что некоторая информация была напечатана в stdout / stderr, которая может (или не может) быть перенаправлена в какой-либо другой файл.
Чтобы увеличить вероятность того, что это произойдет, вы можете использовать что-то вроде: -XX: CrashOnOutOfMemoryError
это выведет причину, даже если приложение не регистрирует ее. Смотрите для получения дополнительной информации или других опций: https://dzone.com/articles/outofmemoryerror-related-jvm-arguments
Еще более полезным может быть регистрация активности и статистики сборщика мусора и их анализ. См.: Как включить ведение журнала Java GC?на https://gceasy.io /
Ответ №2:
Эти параметры относятся только к JVM и не зависят от конкретного приложения. Вряд ли это что-то связанное с AEM.