Ставьте лайк и смотрите снова, формируйте привычку, ищите в WeChat【Третий принц Ао Бин] Обратите внимание на этот инструмент человека, который борется за выживание в Интернете.
эта статьяGitHub github.com/JavaFamilyВключено, и есть полные тестовые площадки, материалы и мой цикл статей для интервью с производителями первой линии.
В прошлый раз я рассказывал друзьям о процессе расследования бесконечного цикла загрузки процессора, а сегодня я покажу вам, как устранять неполадки с переполнением динамической памяти.
- cpu100% статья о расследовании
Перед расследованием, я думаю, каждый должен знать базовые знания о jvm, верно?
Я просто не понимаю свою жену, они хотят, чтобы ты мне сказал.
Хорошо, эх, вы действительно ничего не можете с этим поделать, тогда я верну вас к модели памяти JVM (эта штука отличается от модели памяти JAVA JMM, не запомните неправильно)
Сегодня я говорю только о куче, потому что переполнения отправляются в куче.
Память кучи JVM разделена на две части: молодое поколение и старое поколение.
молодое поколение
Молодое поколение – это место, где создаются все новые объекты. Сборка мусора запускается, когда пространство памяти молодого поколения израсходовано. Эта сборка мусора называется Minor GC.
Молодое поколение разделено на три части --enden район и два района выживаров.
Ключевые выводы из пространства молодого поколения:
- Большинство вновь созданных объектов находится в районе Эдема.
- Когда область Эдема заполняется объектами, выполняется Minor GC и все уцелевшие объекты переносятся в одну из выживших областей.
- Minor GC также проверяет наличие выживших объектов и перемещает их в другую область выживших. Таким образом, в течение некоторого времени всегда будет пустая область выживших.
- После нескольких циклов GC уцелевшие объекты перемещаются в пространство памяти старого поколения, обычно путем установки возрастного порога, прежде чем молодое поколение сможет перейти в старое поколение.
старое поколение
Память старого поколения содержит долгоживущие объекты и объекты, пережившие несколько минорных GC.Сборка мусора обычно выполняется, когда память старого поколения заполнена.
Тип ГХ
Major GC
Устаревшая сборка мусора называется Major GC.Major GC обычно эквивалентен полному GC, собирающему всю кучу GC.
Генерационный GC
- Young GC: собирает только GC молодого поколения
- Old GC: собирает только GC старого поколения (только параллельный сбор CMS это режим)
- Mixed GC: Соберите GC всего молодого поколения и части старого поколения (этот режим есть только у G1)
Full GC
Определение полного GC относительно ясное, то есть глобальная область GC для всего нового поколения, старого поколения и метапространства (java8 или более поздняя версия заменяет perm gen).
На приведенном выше рисунке видно, что молодое поколение разделено на область Эдема и две области выживших (S1, S2).В области выживших будет только одна полная и одна пустая одновременно, попеременно.
Затем GC достигает определенного порога старости.Сегодня мы не говорим о постоянном поколении, поэтому Mataspace игнорируется.
Жена: Тогда как это анализировать?
Сегодня я буду использовать инструмент, который поставляется с JDK, jvisualvm, чтобы показать вам, как с ним работать, потому что он есть у всех, вы можете перейти в командную строку и ввести jvisualvm, и он появится (Mac такой, я не знаю не знаю как винда похожа) оф).
Интерфейс работы:
В общем, что может быть за перелив?
Аномальные проблемы, такие как тайм-аут, отсутствие обслуживания, зависание службы и необслуживаемый интерфейс.
Моделирование тоже очень простое, я пишу цикл и продолжаю забрасывать данные в список, я вижу явление без использования списка.
Вы можете видеть, что графический интерфейс по-прежнему очень понятен, это плагин Visual GC.
Все нажимают на плагин в строке меню, а затем устанавливают его.После установки не забудьте нажать Активировать.
Можно видеть, что если он не будет освобожден, пространство кучи будет увеличиваться до тех пор, пока не будет достигнуто значение OOM (недостаточно памяти).
В это время мы выгрузим информацию о куче, чтобы увидеть
Это будет дамп такого файла снапшота hprof, который можно проанализировать с помощью самой системы jvisualvm.Я рекомендую здесь MAT, потому что я к этому привык.
Спускаемся, мы видим, что мат проанализировал наш файл
Вы видите, что он теплый человек.Он помог нам проанализировать проблему.Давайте кликнем и посмотрим.
Он нашел проблему с ArrayList, давайте посмотрим
Как видите, местонахождение конкретного кода помогло нам найти его, и расследование является делом рук.
точка расширения
Мы использовали инструмент для дампа выше, так как же сделать дамп на сервере?
jmap -dump:format=b,file=<dumpfile.hprof> <pid>
Кто-то из друзей, возможно, спрашивал, не все неисправности присутствовали в то время, мы не могли вовремя сбросить, это просто
-XX:+HeapDumpOnOutOfMemoryError
После настройки этой штуки oom автоматически сделает дамп, а потом сделает снимок и проанализирует.
Функций МАТ еще много.Байду и гугл слишком много статей по инструментам,поэтому повторную работу делать не буду.Например можно еще проверить сильные и слабые ссылки объектов,а еще можно проверить цепочку ссылок и так на.
Есть еще одна причина, почему я пишу этот пункт только потому, что немного поздно, и я не могу больше терпеть. Я не сделал видео в последнее время, потому что у меня слишком много дел. Я немного занят. .
Я Ао Бин, мастер по инструментам, который живет в Интернете.
Лучшие отношения - это достигать друг друга,Всенаш«Три ссылки»Это самая большая движущая сила для создания Bing Bing, увидимся в следующем выпуске!
Примечание. Если в этом блоге есть какие-либо ошибки и предложения, оставьте сообщение,высказываться!
Статья постоянно обновляется, вы можете искать в WeChat "Третий принц Ао Бин"Прочтите это в первый раз, ответьте [материал】【интервью】【резюме] Подготовленные мной материалы интервью и шаблоны резюме крупных заводов первой линии, эта статьяGitHub github.com/JavaFamilyОн был включен, и есть полные тестовые сайты для интервью с крупными заводами.Добро пожаловать в Star.
Чем больше вы знаете, тем больше вы не знаете