Моделирование переполнения памяти и анализ с помощью MAT

Java

Создайте простое приложение Springboot, смоделируйте сценарий OOM, экспортируйте файл дампа кучи и проанализируйте его с помощью Mat.

Создайте простой Springboot для имитации сценариев OOM.

Создайте простой проект Springboot и циклически добавляйте объекты на уровне контроллера до OOM.

//循环添加对象,模拟OOM
List<UserVo> userVoListNew = new ArrayList<>();
for (int i = 0; i < 1024 * 1024 * 1024; i++) {
  userVoListNew.addAll(userVoList);
}

Конкретный адрес кода, пока mysql и redis запускаются локально (вообще полсигареты можно запустить напрямую докером, что удобно и быстро):Таким образом git ee.com/effect/ не чуть-чуть...

Настроить идею и экспортировать файл дампа

1. Настройте параметры виртуальной машины идеи

Установите максимальный объем памяти в параметрах виртуальной машины и укажите расположение файла дампа.

-Xmx512m
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/Users/yclxiao/Desktop/java_error_in_idea.hprof

image-20200415100749289

2. Запустите проект

Начните проект, SWARGER вызывает метод USERCONTROLLER и ждет ООМ, чтобы появиться. Наконец, он появится в настроенном местеjava_error_in_idea.hprofдокумент.

Файл дампа анализа мата

Установить анализатор памяти

ссылка для скачивания:woohoo.eclipse.org/toilet/down ОА…

импортировать файл дампа

Когда вы импортируете файл дампа, вы можете столкнуться с последующей ошибкой:

An internal error occurred during: "Parsing heap dump from '/Users/yclxiao/Desktop/heapdump-1586847376115.hprof'".
Java heap space

image-20200415105047049

Решение: изменитьApplications/mat.app/Contents/Eclipse/MemoryAnalyzer.iniМаксимальная конфигурация памяти в

image-20200415104154405

Примечание: Половина сигареты находится на платформе Mac, а расположение файлов оконной платформы немного отличается Друзья, найдите сами, ха-ха!

Анализ файлов дампа

1. Обзор мат-анализа

Размер экспортированного файла дампа составляет около 400 М. После анализа MAT вы увидите круговую диаграмму, показывающую самые крупные объекты.

image-20200415101642121

2, нажмитеDominator Tree & Leak Suspects

нажмитеDominator TreeМожно перечислить ранг самых больших объектов и объекты, которые они содержат. нажмитеLeak SuspectsВы можете увидеть больше предполагаемых утечек и обзор системы.

image-20200415101855747

3. НажмитеDominator Tree

Вы можете видеть самый большой Object[], а объект, который он держит, отображается слева Согласно этому UserVo, мы, вероятно, можем проверить конкретное место кода.

image-20200415102345372

4. НажмитеLeak Suspects

Который, вероятно, может увидеть поток запросов, который увидел большой объект, увидеть, какой конкретный бизнес-код, есть стеки информации, как правило, на основе этой информации можно быстро найти проблемный бизнес-код.

image-20200415102726981

Суммировать

В этой статье представлены общие методы анализа OOM. Если вы столкнулись с проблемами в сети, сначала стабилизируйте и не паникуйте, сохраните поток (установите расположение дампа OOM) в первый раз, затем перезапустите службу, а затем используйте инструмент Mat для анализа проблемы.

Конечно, проблема может возникнуть и в других местах.Если вы столкнулись с проблемой с половиной сигареты, вы обычно запускаете три команды top, df и free.Во-первых, посмотрите на процессор, жесткий диск, память и т. д. машины, а затем сделать последующий анализ.

Если у вас есть больше хороших предложений, добро пожаловать в общение со мной.

Оригинальная ссылка