Используйте собственные инструменты JDK для анализа памяти JVM.
Используйте собственные инструменты JDK для анализа памяти JVM.

Заглавное изображение взято из Астрономической картинки дня.

Выполнение анализа памяти JVM может помочь устранить существующие и потенциальные проблемы.

Используя общие инструменты, поставляемые с jdk, вы можете проанализировать возможные места проблем и определить направления оптимизации.

Анализ памяти JVM имеет много преимуществ.

  • Устранение утечки памяти:JVM Утечка памяти — это память, занятая объектами приложения, которые не могут быть освобождены сборщиком мусора.,Заставляет использование памяти продолжать расти,В конце концов доступная память исчерпана. С помощью инструментов анализа памяти,Может определить, какие объекты занимают много памяти и не могут быть освобождены.,Затем найдите код, который может иметь утечку памяти.
  • Оптимизация памяти:Разумная оптимизация JVM Конфигурация памяти может улучшить производительность и стабильность вашего приложения. Анализируя ситуацию с памятью приложения, вы можете настроить размер кучи, постоянную генерацию (еслида старая версия Java), соотношение нового поколения к старому и другие параметры для уменьшения частоты сборки мусора и уменьшения использования памяти.
  • Настройка производительности:Профилирование памяти также помогает найти узкие места в памяти.,так часто Full Чрезмерное время паузы, вызванное GC (глобальной сборкой мусора). Настраивая тип сборщика мусора, GC Такие параметры, как алгоритмы и размер кучи памяти, могут повысить производительность приложения.
  • Анализ аномалий:Когда приложение обнаруживает исключения, связанные с памятью,Например, OutOfMemoryError (ошибка переполнения памяти),Причину исключения можно найти, проанализировав ситуацию с памятью.,Например, модуль или объект занимает слишком много памяти.
  • планирование мощности:Для больших приложенийили Системы, которые должны работать в течение длительного времени,Выполнение анализа памяти может помочь в планировании движения.,Убедитесь, что в системе достаточно ресурсов памяти для поддержки нормальной работы приложения.

Эта статья будет пройдена один разjvmПроцесс анализа памяти для иллюстрацииjpsjcmdjstatjstack и jmap Как использовать инструмент.

В этой статье используется версия JDK17.

Путешествие по анализу памяти JVM

когда необходимо JVM Анализируя память, используйте ее в сочетании с jpsjcmdjstatjstack и jmap Предоставляется полная диагностическая информация.

Вот общие шаги:

использовать jps Проверять Java процесс PID

Язык кода:bash
копировать
jps -l

Здесь будут перечислены все Java процесс PID и Имя основного класса。

использовать jcmd выполнить несколько диагностических команд

Язык кода:bash
копировать
jcmd <PID> VM.flags
jcmd <PID> VM.system_properties

Эти команды могут отображать JVM Параметры запуска и свойства системы, которые помогут понять JVM конфигурация.

использовать jstat монитор памяти JVM и статус сборки мусора

Язык кода:bash
копировать
jstat -gc <PID> 5000 10

Это будет постоянно выводить JVM Ситуация со сбором мусора, включая ситуацию использования каждой области кучи, GC Время и т. д.

использовать jstack Генерация информации о стеке потоков

Язык кода:bash
копировать
jstack <PID>

Проверять информацию о стеке потоков, чтобы проверить наличие взаимоблокировок или других проблем, связанных с потоками.

использовать jmap Создать файл дампа кучи

Язык кода:bash
копировать
jmap -dump:file=heapdump.hprof <PID>

Это создаст файл с именем heapdump.hprof Файл дампа кучи,Может использоваться для дальнейшего анализа ситуации с памятью.,Найдите такие проблемы, как утечки памяти.

Анализ файла дампа кучи

использовать Такие инструменты, как Eclipse Memory Analyzer (MAT) или VisualVM Анализ созданного файла дампа кучи на предмет обнаружения таких проблем, как утечки памяти, большие и бесполезные объекты.

путем объединенияиспользоватьэти инструменты,могу полностью понять JVM Статус выполнения, диагностика проблем с производительностью и устранение ошибок, связанных с памятью.

Способы использования инструмента подробно описаны ниже.

jps

jps да JDK Предоставленный для листинга Java Инструмент командной строки для обработки виртуальной машины. Обычно используется для проверки, работающей в данный момент в системе. Java процесс PID (идентификатор процесса) и соответствующее имя основного класса.

Ниже да jps использовать метод команды:

илииспользоватьps -ef|grep java Вы также можете выполнить поиск соответствующего pid.

Язык кода:bash
копировать
jps [ options ] [ hostid ]

в,options данекоторые необязательные параметры,hostid да Необязательный идентификатор хоста. Обычно Используемые опции включают в себя:

  • -q:толькопоказыватьпроцесс PID, соответствующее имя основного класса не отображается.
  • -m:показыватьперешел в основной класспараметры.
  • -l:показывать Полное имя основного класса.,Часто используется для обозначения конкретного приложения Java.
  • -v:показыватьперешел к JVM параметры.

Например, чтобы отобразить все Java процесс PID Соответствующее имя основного класса можно запустить напрямую jps Заказ:

Язык кода:bash
копировать
jps

Если вы хотите показать только PID,Можетиспользовать -q Параметры:

Язык кода:bash
копировать
jps -q

Чтобы получить полное имя основного класса, вы можете использовать -l Параметры:

Язык кода:bash
копировать
jps -l

Если вы хотите отобразить пропуск Параметры основного класса можно использовать -m Параметры:

Язык кода:bash
копировать
jps -m

Если вы хотите отобразить пропуск к JVM Параметры, можно использовать -v Параметры:

Язык кода:bash
копировать
jps -v

jcmd

jcmd:jcmd Команда да Java 8 Новая команда может выполнять различные JVM Задачи мониторинга и диагностики. Например, вы можете jcmd <pid> VM.flags Проверять JVM Параметры запуска, илииспользовать jcmd <pid> Thread.print Вывести информацию о стеке потоков.

Ниже да jcmd Основной метод команды:

Язык кода:bash
копировать
jcmd <PID | main class> <command> [options]

в:

  • <PID | main class>:Быть оперированным Java процесс PID (идентификатор процесса) или имя основного класса. если предлагает PID, затем напрямую управляйте соответствующим Java процесс;если предоставляет имя основного класса, то jcmd попробую найти совпадение Java обработать и выполнить соответствующие команды.
  • <command>:диагностическая команда для выполнения。
  • [options]:Необязательные параметры команды。

Обычно используется jcmd Команды включают в себя:

  • help: показывать jcmd Список поддерживаемых команд с кратким описанием каждой команды.
  • VM.version: показывать JVM информация о версии.
  • VM.flags: показывать JVM параметры запуска.
  • VM.system_properties: показывать JVM системные свойства.
  • Thread.print: Распечатать Java Информация стека для всех потоков в процессе.
  • GC.run: Выполните сбор мусора.
  • GC.heap_dump: генерировать Java Файл дампа кучи (куча dump)。

Например, если вы хотите распечатать указанный Java Информация о стеке потоков процесса,Можетиспользоватьниже Заказ:

Язык кода:bash
копировать
jcmd <PID> Thread.print

Если Чтобы выполнить сборку мусора, вы можете сделать следующее:

Язык кода:bash
копировать
jcmd <PID> GC.run

Если вы хотите сгенерировать Java Файл дампа кучи,Можетиспользоватьниже Заказ:

Язык кода:bash
копировать
jcmd <PID> GC.heap_dump <filename>

jstat

jstat:jstat Команда может контролировать JVM Память, сбор мусора и т.д. Например, вы можете jstat -gc <pid> Проверить Статистика сбора мусора,илииспользовать jstat -gcutil <pid> Проверить статистику сбора мусора и ситуацию с использованием памяти.

Ниже да jstat Основной метод использования:

Язык кода:bash
копировать
jstat [ options ] <PID> [ interval [ count ] ]

в:

  • [ options ]:Дополнительные параметры команды,Используется для указания типа и формата данных, которые будут отображаться.
  • <PID>:хотетьмониториз Java процесс PID (идентификатор процесса).
  • [ interval ]:Дополнительные параметры,Указывает интервал времени (в миллисекундах), через который выводится статистика. если опущено,По умолчанию — один раз в секунду.
  • [ count ]:Дополнительные параметры,Указывает количество раз вывода статистики. если опущено,По умолчанию — неограниченный вывод.

Обычно используется jstat Опции команды включают в себя:

  • -class: отображать информацию о загрузке и выгрузке классов, а также состояние загрузчика классов.
  • -gc: Информация, связанная с отображением сборки мусора, включая статус использования каждого поколения, GC. Время и т. д.
  • -compiler: Статистика компиляции для отображения JIT-компилятора.
  • -gccapacity: показать емкость и использование каждой области кучи.
  • -gcutil: показать ситуацию использования в каждой области кучи, выраженную в процентах.
  • -gccause: шоу привело к последнему GC причина.
  • -printcompilation: Информация о компиляции «точно в срок» (JIT) для метода Распечатать.

Например,Чтобы проверить статус загрузки класса Java-процесса,Можетиспользоватьниже Заказ:

Язык кода:bash
копировать
jstat -class <PID>

Если вы хотите, чтобы каждый 5 Информация о загрузке выходного класса один раз в секунду, общий вывод 10 Второсортный,Можетиспользоватьниже Заказ:

Язык кода:bash
копировать
jstat -class <PID> 5000 10

jstat может только проверять текущую информацию о сборщике мусора.,ПроверятьgcЖурналы больше подходят для онлайн-сред.изупражнятьсядапри запускеJVMДобавлено, когда-XX:+PrintGCDetails -Xloggc:/path/to/gc.log(JDK1.8ниже)или-Xlog:gc*:file=/path/to/gc.log(JDK9+)параметр,Поместите файл журнала gc с ограничением в GCViewer и GCeasy (требуется регистрация) для анализа.

jstack

jstack:jstack команда для генерации Java Снимки дампа потока можно использовать для анализа состояния потока, взаимоблокировок и других проблем. Например, вы можете jstack <pid> Распечатать информацию о стеке потоков илииспользовать jstack -l <pid> Распечатать информацию о стеке потоков и заблокировать информацию.

Ниже да jstack Основной метод команды:

Язык кода:bash
копировать
jstack [ options ] <PID>

в:

  • [ options ]:Дополнительные параметры команды,Используется для указания формата вывода и т. д.
  • <PID>:хотеть Генерация информации о стеке потоковиз Java процесс PID (идентификатор процесса).

Обычно используется jstack Опции команды включают в себя:

  • -l: формат длинного списка,показать Дополнительную информацию о замках,Например, владелец и очередь ожидания.
  • -F: Когда нормальный выход jstack Генерация силы, когда команда не работает информации о стеке потоков。Это Java Может быть полезно, когда процесс не отвечает, но может привести к зависанию процесса на некоторое время.
  • -m: показывать Java и трассировка стека для собственных методов, а не только да Java Трассировка стека.
  • -h: показать справочную информацию.

Например, чтобы сгенерировать указанный Java Информация о стеке потоков процесса,Можетиспользоватьниже Заказ:

Язык кода:bash
копировать
jstack <PID>

Если вы хотите вывести информацию о стеке потоков в формате длинного списка, вы можете использовать -l Параметры:

Язык кода:bash
копировать
jstack -l <PID>

если Java процесс не отвечает, можно использовать -F Вариант принудительного исполнения информацию о стеке потоков:

Язык кода:bash
копировать
jstack -F <PID>

jmap

Исключение не произошло. Код исключения местоположения.,нуждатьсяхотетьпроходитьjmapгенерироватьdumpдокумент。

Затем импортируйте его в MAT для анализа. да Создать файл дампа Шаги для кучи:

  • Определить идентификатор процесса Java:первый,нуждатьсяхотеть Конечно Бегиз Java процесспроцесс ID(PID)。Можетиспользовать jps Команда Проверять выполняется Java процесс и его PID。
  • Создать файл дампа кучи:использовать jmap Заказ Создать файл дампа кучи. Формат команды следующий:
Язык кода:shell
копировать
jmap -dump:file=<документпуть> <PID>

Например, чтобы создать файл с именем heapdump.hprof Для файла дампа кучи вы можете выполнить следующее:

Язык кода:shell
копировать
jmap -dump:file=heapdump.hprof <PID>

Это создаст файл с именем heapdump.hprof Файл дампа кучи.

  • Импортируйте файл дампа кучи в MAT.:Волягенерировать Файл дампа кучиимпортировать в MAT для анализа. Открыть МАТ и выберите File -> Open Heap Dump,Затем выберите Файл дампа кучи.
  • Выполните анализ памяти:один раз Файл дампа кучи被импортировать в MAT в, вы можете Выполнить анализ памяти, выполните действия, упомянутые ранее, чтобы обнаружить проблемы с памятью.

проходить这些步骤Может Руководство Создать файл дампа кучиииспользовать MAT провести анализ, даже если нет OutOfMemoryError Автоматическое создание файла дампа кучи при его возникновении также может помочь вам обнаружить проблему.

Больше подходит для онлайн-средыизупражнятьсядапри запускеJVMДобавлено, когда-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprofпараметр,Таким образом, когда возникает OutOfMemoryError,JVM автоматически создаст файл дампа кучи。

Об авторе

Исследование и практика девяти, фронтового программиста полного стека, продолжаются.

jvm
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose