Подробное объяснение индикаторов мониторинга Springboot2 + Micrometer
Подробное объяснение индикаторов мониторинга Springboot2 + Micrometer

Введение:springboot2 Услуги по мониторингу проектов , используя библиотеку метрик Micormeter, которая поможет нам отслеживать метрики приложения и отправлять их в Prometheus. Индикаторы мониторинга включают загрузку системы, использование памяти, время ответа приложения, пропускную способность, частоту ошибок и т. д.

Библиотека индикаторов микрометрических измерений собирает индикаторы мониторинга для приложений Springboot и в основном отражается в многочисленных элементах мониторинга JVM.

1. Общие индикаторы мониторинга JVM

2. Подробное объяснение элементов мониторинга JVM.

серийный номер

индекс

тип

значение

оригинальный

1

logback_events_total

counter

Количество событий уровня ошибки, зарегистрированных в журнале.

Number of error level events that made it to the logs

2

system_cpu_usage

gauge

«Недавнее использование процессора» всей системы

The "recent cpu usage" for the whole system

3

system_load_average_1m

gauge

Загрузка системы

The sum of the number of runnable entities queued to available processors and the number of runnable entities running on the available processors averaged over a period of time

4

system_cpu_count

gauge

Количество процессоров, доступных виртуальной машине Java

The number of processors available to the Java virtual machine

5

process_start_time_seconds

gauge

Время запуска процесса (в секундах) с эпохи unix

Start time of the process since unix epoch.

6

process_cpu_usage

gauge

«Недавнее использование ЦП» процесса виртуальной машины Java

The "recent cpu usage" for the Java Virtual Machine process

7

process_uptime_seconds

gauge

Время работы виртуальной машины Java

The uptime of the Java virtual machine

8

process_files_open_files

gauge

Количество открытых файловых дескрипторов

The open file descriptor count

9

process_files_max_files

gauge

Максимальное количество файловых дескрипторов

The maximum file descriptor count

10

tomcat_sessions_expired_sessions_total

counter

Общее количество истекших сеансов в tomcat

11

tomcat_sessions_rejected_sessions_total

counter

Общее количество отклоненных сеансов Tomcat

12

tomcat_sessions_active_max_sessions

gauge

tomcat_maximum количество активных сессий

13

tomcat_sessions_created_sessions_total

counter

Общее количество созданных сеансов Tomcat

14

tomcat_sessions_active_current_sessions

gauge

Количество текущих активных сессий в tomcat

15

tomcat_sessions_alive_max_seconds

gauge

Максимальное время выживания сеанса Tomcat

16

jvm_classes_loaded_classes

gauge

Количество классов, загруженных в данный момент в виртуальную машину Java.

The number of classes that are currently loaded in the Java virtual machine

17

jvm_classes_unloaded_classes_total

counter

Количество не загруженных классов

The total number of classes unloaded since the Java virtual machine has started execution

18

jvm_memory_used_bytes

gauge

Использование памяти

The amount of used memory

19

jvm_memory_max_bytes

gauge

Максимальный объем памяти в байтах, доступный для управления памятью.

The maximum amount of memory in bytes that can be used for memory management

20

jvm_memory_committed_bytes

gauge

Объем памяти, предоставленный виртуальной машине Java для использования (в байтах).

The amount of memory in bytes that is committed for the Java virtual machine to use

21

jvm_buffer_memory_used_bytes

gauge

Буфер JVM использовал память

An estimate of the memory that the Java virtual machine is using for this buffer pool

22

jvm_buffer_total_capacity_bytes

gauge

Оценка общей емкости буфера

An estimate of the total capacity of the buffers in this pool

23

jvm_buffer_count_buffers

gauge

Текущее количество буферов

An estimate of the number of buffers in the pool

24

jvm_gc_pause_seconds

summary

Время паузы GC

Time spent in GC pause

25

jvm_gc_pause_seconds_max

gauge

Максимальное время паузы GC

Time spent in GC pause

26

jvm_gc_max_data_size_bytes

gauge

Максимальный размер пула памяти старого поколения

Max size of old generation memory pool

27

jvm_gc_memory_allocated_bytes_total

counter

Размер пула памяти молодого поколения увеличивается после одного GC и перед следующим GC.

Incremented for an increase in the size of the young generation memory pool after one GC to before the next

28

jvm_gc_live_data_size_bytes

gauge

Размер пула памяти старого поколения после полного GC

Size of old generation memory pool after a full GC

29

jvm_gc_memory_promoted_bytes_total

counter

Подсчет положительного роста размера пула памяти старого поколения от до GC до после GC

Count of positive increases in the size of the old generation memory pool before GC to after GC

30

jvm_threads_states_threads

gauge

Количество потоков, находящихся в настоящее время в состоянии НОВОЕ

The current number of threads having NEW state

31

jvm_threads_live_threads

gauge

Текущее количество активных потоков, включая потоки-демоны и потоки, не являющиеся демонами.

The current number of live threads including both daemon and non-daemon threads

32

jvm_threads_daemon_threads

gauge

Текущее количество потоков демона

The current number of live daemon threads

33

jvm_threads_peak_threads

gauge

Пиковое количество потоков JVM

The peak live thread count since the Java virtual machine started or peak was reset

34

http_server_requests_seconds

summary

Статус вызова HTTP-запроса

35

http_server_requests_seconds_max

gauge

3. Использование индикаторов в эксплуатации и обслуживании

3.1. Обзор базовой информации о JVM.

Время запуска: Время запуска JVM — то есть: по этому индексу можно узнать время запуска текущей программы.

Uptime: выполнение среды JVM — то есть: по этому индексу можно узнать текущее время работы программы.

3.2. I/O Detail

Операции ввода-вывода в JVM — очень важная часть приложения, поэтому необходимо отслеживать и измерять соответствующие операции, чтобы обеспечить нормальную работу системы.

На диаграмме скорости: QPS: частота запросов в секунду, которая представляет собой количество запросов, на которые сервер может ответить в секунду. Это мера объема трафика, который конкретный сервер запросов обрабатывает в течение определенного периода времени.

Проще говоря, QPS = req/sec = количество запросов в секунду. Он отражает производительность серверной машины и ее максимальную пропускную способность.

Продолжительность На рисунке: AVG: относится к среднему времени ожидания средней задержки, времени обработки запроса (мин: минимальное значение, макс: максимальное значение, среднее: среднее значение, текущее: в реальном времени).

Подробное объяснение измерения ввода-вывода в JVM и примеры сценариев обнаружения проблем:

  1. Пропускная способность ввода-вывода Пропускная способность Ввод-вывода относится к скорости, с которой приложение выполняет операции ввода-вывода, которую можно рассчитать, отслеживая время завершения операций ввода-вывода и количество операций ввода-вывода. Если Пропускная способность ввода-выводаслишком низко,Может привести к снижению производительности системы。
    1. Сценарий обнаружения проблем: если приложению требуется большое количество операций ввода-вывода, вы можете отслеживать соответствующую Пропускную способность input-выводаиндекс, чтобы определить, есть ли проблемы с производительностью.
  2. Задержка ввода/вывода Задержка Ввод/вывода относится к времени отклика приложения на операции ввода-вывода, которое можно рассчитать, отслеживая время завершения операций ввода-вывода и количество операций ввода-вывода. Если Задержка ввода/выводаслишком высокий,Может привести к снижению производительности системы。
    1. Сценарий обнаружения проблемы: если приложению требуется большое количество операций ввода-вывода.,Вы можете следить за соответствующей Задержкой. ввод/выводаиндекс, чтобы определить, есть ли проблемы с производительностью.
  3. Количество открытых файлов Количество открытых Файлы относятся к количеству файлов, одновременно открытых приложением, и могут быть рассчитаны путем отслеживания количества файловых дескрипторов. Если количество открытых файловслишком высокий,Может привести к истощению системных ресурсов。
    1. Сценарий обнаружения проблемы: если приложению необходимо открыть большое количество файлов одновременно, вы можете отслеживать соответствующее количество. открытых фифиндекс, чтобы определить, недостаточно ли системных ресурсов.
  4. использование буфера использование Буфера относится к использованию буфера приложением и может быть рассчитана путем мониторинга размера и использования буфера и т. д. Если сипользование буфераслишком низкоилислишком высокий,может привести кI/Oухудшение производительности。
    1. Сценарий обнаружения проблем: если приложению необходимо часто использовать буфер, вы можете отслеживать соответствующее использование. буфераиндекс, чтобы определить, есть ли проблемы с производительностью.
  5. Количество сетевых подключений Количество сетевых подключений относится к приложениям, которые открыты одновременно. сетевых подключений, можно рассчитать путем мониторинга количества сетевых подключений и состояния сетевых подключений и т. д. индекса. Если количество сетевых подключенийслишком высокий,Может привести к истощению системных ресурсов。
    1. Сценарий обнаружения проблем: если приложению необходимо одновременно открыть большое количество сетевых подключений, вы можете отслеживать соответствующее количество сетевых индекс подключения, чтобы определить, недостаточно ли системных ресурсов. В итоге,Для операций ввода-вывода в JVM,Сценарии проблем можно обнаружить путем мониторинга соответствующего индекса.,И принять соответствующие меры по оптимизации для улучшения производительности системы.

3.3. Память JVM – память JVM.

3.3.1. Фильтровать элементы.

Виртуальная машина Java делит кучу памяти на три области: молодое поколение, старое поколение и постоянное поколение. 1. Молодое поколение: Молодое поколение разделено на область Эдема и две области Выжившего (одну от Выжившего и одну до Выжившего). Каждый раз будут использоваться только Эдем и одна из областей Выжившего. Причина такого распределения заключается в том, что молодое поколение использует «. copy» для повторного использования. При создании нового объекта (в большинстве случаев) пространство, занимаемое объектом, будет выделено в области Eden. Если свободного места в области Eden недостаточно, виртуальная машина вызовет Minor. GC, чтобы отделить область Эдема от Объекты, которые все еще живы в области «Выживший», перемещаются в область «Выживший». Если после нескольких второстепенных GC объект все еще жив, он будет перемещен в старое поколение. 2. Старая эпоха (старая) Хранит долговременно сохранившиеся объекты в системе, например, некоторые одноэлементные объекты, размещенные в Spring, такие как объекты обслуживания, объекты dao и т. д. Есть также некоторые объекты, которые передаются из молодого поколения, когда пространство молодого поколения все еще недостаточно после незначительного GC. Эти объекты обычно являются основной причиной полного GC в системе. 3. Постоянная генерация (Пермь) Хранит такие данные, как информация о классе, константы, статические переменные, код, скомпилированный JIT-компилятором, и т. д., которые были загружены виртуальной машиной.

3.3.2. Текущее использование динамической памяти.

Используемая куча: использование памяти кучи; рассчитывается на основе: используемая память кучи (байты) / размер памяти кучи (байты).

Использовано без кучи: использование памяти вне кучи, рассчитанное на основе: используемой памяти вне кучи (байты) / размера памяти вне кучи (байты);

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ:

Высокое использование памяти, достигающее более 70% в течение длительного времени;

Когда использование кучи памяти в приложении постоянно велико и не уменьшается. Это неизбежно приведет к исчерпанию ресурсов памяти программы и ее зависанию;

Его можно просмотреть на основе уровня использования старого поколения, если уровень использования превышает 90%;

другой ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ:

Сценарий 1: переполнение памяти, область кучи JVM или область методов не могут вместить сохранившиеся и ожидающие объекты. Например: исключения OOM (нехватка памяти) возникают в системе в периоды пиковой нагрузки, и для оптимизации необходимо обнаружить узкие места в памяти.

Сценарий 2: Утечка памяти: объекты, которые больше не будут использоваться, не могут быть переработаны сборщиком мусора. Например: Полный сбор мусора происходит после того, как система проработала в течение определенного периода времени, или даже периодически необходимо перезапускать OOM вручную, чтобы решить проблему.

Сценарий 3: Высокое использование памяти. Например, если система часто выполняет сборку мусора, необходимо определить причины, влияющие на производительность, стабильность и пропускную способность службы в реальном времени.

Анализ проблем (возникающие проблемы включают в себя):

1. Проблема с распределением памяти

2. Длительное хранение больших объектов supersql потребляет память.

3. Проблема тупика

4. Существует множество длинных связей в опросах или других причин, которые приводят к увеличению тредов Art of War.

Для анализа конкретной проблемы обратитесь к следующему индексу мониторинга.

3.3.3. Концепция:

JVM Подробное объяснение Memoryindex и пример того, как обнаружить проблемные сценарии в производственной среде: JVM Индекс памяти включает в себя следующие аспекты:

  1. JVM Heap Память. Куча-память — это область памяти в JVM, где хранятся экземпляры объектов. Обычно это самая важная область памяти в JVM. Куча Memoryиндекс Можно разделить на следующие размеры:
  • heap.used: используемый размер кучи памяти
  • heap.commited: зафиксированный размер памяти кучи
  • heap.max: Максимальный доступный размер памяти кучи.

 2. JVM Non-Heap Память. Память без кучи относится к области памяти в JVM, в которой хранится информация о классах, информация о методах, константы и другие данные. Не-куча Memoryиндекс Можно разделить на следующие размеры:

  • nonheap.used: используемый размер памяти без кучи
  • nonheap.commited: зафиксированный размер памяти без кучи
  • nonheap.max: Максимальный доступный размер памяти без кучи.

3. Общее использование памяти JVM JVM

  • Used — это объем памяти, который был использован
  • commit — это текущий объем используемой памяти (включая использованную) >= использовал. Если зафиксировано недостаточно, jvm применяется к системе. Если оно превышает максимальное значение, возникает ошибка OutOfMemoryError.
  • max — максимальное значение памяти.

3.3.4. Отслеживая эти индикаторы памяти JVM, вы можете обнаружить некоторые сценарии проблем в производственной среде, например:

  1. Утечка памяти. Если используемое значение памяти кучи продолжает расти, а не освобождается, возможно, возникла проблема с утечкой памяти. Вы можете определить местонахождение кода проблемы утечки памяти, отслеживая используемое значение памяти кучи.
  2. Переполнение памяти: если куча Используемое значение Памяти достигло максимального значения и продолжает расти. Возможно, возникла проблема с переполнением памяти. Вы можете контролировать Heap с помощью Используемое значение памяти и максимальное значение,Обнаружение проблем с переполнением памятиизрасположение кода。
  3. Частое выделение памяти: если используемое значение пула памяти Eden продолжает расти, а используемое значение пула памяти Survivor продолжает оставаться низким, может возникнуть проблема с частым выделением памяти. Вы можете найти места кода с частыми проблемами с распределением памяти, отслеживая используемое значение пула памяти.

Подводя итог, отслеживая JVM в Micrometer Memoryиндекс,Может обнаружить некоторые проблемы с памятью в производственной среде.,Затем примите соответствующие меры по оптимизации для улучшения производительности системы.

3.4. JVM Memory Pools(Heap)

  1. Пул памяти: Пул памяти — это механизм управления памятью в JVM. Пул памяти можно разделить на Eden, Survivor, Old и т. д.

PS Eden Space: Новое поколение

PS Old Gen: старое поколение

Как правило, в новое поколение будут помещаться только те объекты, которые не были переработаны после определенного количества сборок мусора. Мы считаем, что эти объекты будут существовать в течение длительного времени, поэтому мы перенесем их в хранилище. район старого поколения.

PS Survivor Space: Новое поколение

Если сборщик мусора не отсортирует уцелевшие объекты после переработки объектов мусора, в памяти останется много прерывистого пространства, что мы часто называем фрагментацией пространства. Поскольку непрерывного распределения пространства не существует, это может вызвать у нас большую проблему. У нас нет соответствующего непрерывного распределения пространства для объектов, но на самом деле в памяти есть общее пространство, которое может вместить объекты.

Поэтому, чтобы уменьшить подобную фрагментацию пространства, мы использовали другой метод, чтобы разделить новое поколение на область Эдема и область Выжившего. При выполнении сбора мусора сначала скопируйте уцелевшие объекты в область Выжившего, а затем объедините область Эдема. . Очистите, чтобы область Эдема была сплошным пространством после каждого GC.

2. Индекс пула памяти можно разделить на следующие измерения:

  • Pool.used: используемый размер кучи памяти. Указывает размер памяти, выделенной в настоящее время для кучи Java.
  • пул.коммитед: зафиксированный размер памяти кучи. Указывает максимально доступное пространство динамической памяти Java, которое представляет собой максимальное значение динамической памяти, указанное параметром -Xmx.
  • Pool.max: Максимальный доступный размер кучи. Указывает максимальный размер кучи, доступный в текущем экземпляре JVM, который обычно является частью физической памяти.
  • Init: начальный размер памяти кучи. Указывает размер пространства памяти, выделенного для кучи Java при запуске JVM, обычно это начальное значение памяти кучи, указанное параметром -Xms.

Мониторинг индекса JVM Memory Pools(Heap) позволяет обнаружить следующие проблемы:

  1. Переполнение памяти: если Usedindex продолжает расти,и приблизился или достиг значения Максиндекса,Тогда может произойти переполнение памяти. Вы можете расширить объем динамической памяти, добавив параметр -Xmx.,Или оптимизируйте код, чтобы уменьшить использование памяти.
  2. Утечка памяти: если Usedindex продолжит расти,И никаких изменений в Commitedindex нет.,Тогда может произойти утечка памяти. Вы можете использовать инструменты анализа памяти, чтобы найти причину утечек памяти.,и сделать ремонт.
  3. Частый GC: если индекс Usedindex сильно колеблется,И частота выше,Тогда может возникнуть проблема частого GC. Частоту GC можно уменьшить, изменив стратегию GC или оптимизировав код.

Подводя итог, Мониторинг JVM Memory Pools(Heap)индекс,Мы можем оперативно обнаружить и устранить проблемы с памятью в Java-приложениях.,Улучшите производительность системы.

3.5. JVM Memory Pools(Non-Heap)

JVM Memory Индекс Pools(Non-Heap) используется для мониторинга использования памяти без кучи приложениями Java, включая Metaspace, Code Cache、Compressed Class Spaceждать。Он обеспечивает несколько измеренийизиндекс,Может помочь нам глубже понять использование памяти Java без кучи.,Выявляйте проблемы и проводите целенаправленную оптимизацию.

Память без кучи также называется пространством PermGen (постоянное поколение), что соответствует концепциям нового поколения и старого поколения. Это постоянно сохраняемая область, используемая для хранения информации о классе и мета-классе, когда она помещается в эту область. оно загружено. Пространство GC PermGen очищать не следует.

3.5.1. Концепция.

  1. Metaspace: метапространство
    1. Метапространство содержит другие относительно большие метаданные класса, такие как методы, байт-код, пул констант и т. д.
  2. Compressed Class SpaceПространство сжатия указателя класса
    1. Пространство сжатия указателя класса содержит только метаданные класса, такие как InstanceKlass, ArrayKlass Вступает в силу только в том случае, если включена опция UseCompressedClassPointers. Для повышения производительности здесь также хранится таблица виртуальных методов Java. Количество хранящихся здесь метаданных продолжает уменьшаться.
  3. Code Cache Кэш кода
    1. Используется для компиляции и сохранения локального кода.

3.5.2 Подробное объяснение индикатора JVM Memory Pools (Non-Heap) и примеры поиска проблем:

  1. Зафиксировано: зафиксированный размер памяти без кучи. Представляет максимально доступное пространство памяти Java без кучи.
  2. Макс. Максимально доступный размер памяти без кучи. Указывает максимальный размер памяти без кучи, доступный в текущем экземпляре JVM, который обычно является частью физической памяти.
  3. Используемый: используемый размер памяти без кучи. Указывает размер памяти без кучи, выделенной в данный момент для Java.
  4. Init: начальный размер памяти без кучи. Указывает размер памяти без кучи, выделяемой Java при запуске JVM. Мониторинг JVM Memory Pools(Non-Heap)индекс,Мы можем найти следующие проблемы:
  5. Переполнение памяти: если Usedindex продолжает расти,и приблизился или достиг значения Максиндекса,Тогда может произойти переполнение памяти. Объем памяти без кучи можно расширить, добавив параметр -Xmx.,Или оптимизируйте код, чтобы уменьшить использование памяти.
  6. Утечка памяти: если Usedindex продолжит расти,И никаких изменений в Commitedindex нет.,Тогда может произойти утечка памяти. Вы можете использовать инструменты анализа памяти, чтобы найти причину утечек памяти.,и сделать ремонт.
  7. Частая загрузка классов: если индекс Metaspace продолжает расти,И частота выше,Тогда может возникнуть проблема частой загрузки классов. Частоту загрузки классов можно уменьшить, настроив механизм загрузки классов или оптимизировав код.

Подводя итог, Мониторинг JVM Memory Pools(Non-Heap)индекс,Мы можем оперативно обнаружить и решить проблемы с памятью, не связанной с кучей, в Java-приложениях.,Улучшите производительность системы.

3.5.3 Предыдущие идеи и действия по устранению неполадок.

Идеи по устранению неполадок, объясняющих причины, по которым использование служебной памяти слишком велико:

  1. Память кучи, выделяемая при запуске службы, слишком мала (связано с XmsиXmx, -Xms Это начальное значение кучи, применяемое при запуске JVM, -Xmx. Это максимальное значение кучи, которое можно применить при работе JVM).
  2. Создается большое количество крупных объектов, которые не перерабатываются GC вовремя или не могут быть переработаны GC из-за ссылок (в коде есть необоснованные места и требуется оптимизация кода)
  3. После GC,Хотя объекты в куче будут очищены,Но не освобождает память,Запрошенная память не возвращается в операционную систему (связано со сборщиком мусора и механизмом его переработки).

Связанные команды:

1. free -m # Проверьте использование памяти. Добавьте после него m, чтобы отобразить его в единицах M.

2. Проверьте, какие процессы используют больше всего памяти: top -c, введите M в верхнем регистре и выполните сортировку по использованию памяти от большего к меньшему.

VSS — размер виртуального набора виртуальной потребляемой памяти (включая память, занимаемую разделяемыми библиотеками)

Размер резидентного набора RSS Фактическая используемая физическая память (включая память, занимаемую общими библиотеками)

PSS — размер пропорционального набора Фактически используемая физическая память (память, занятая разделяемой библиотекой с пропорциональным распределением)

USS — уникальный размер набора. Физическая память, занимаемая только процессом (исключая память, занимаемую разделяемыми библиотеками).

Вообще говоря, использование памяти имеет следующие правила: VSS >= RSS >= PSS >= USS

3、проходитьjmap -heap идентификатор процесса Исключение команды связано с проблемой выделения памяти в куче

jmap -heap 21114

4. Просмотр топ-20 объектов, занимающих больше всего ресурсов в процессе (в основном выполняется под пользователем, включившим соответствующую программу)

jmap -histo:live 19424 |head -20

5. jstat проверяет использование памяти процессом

jstat -gcutil 19424

Теперь: На основании вышеизложенного мониторинга можно сделать вывод, что с кодом позиционирования в журнале бывают необоснованные ситуации.

Посмотреть в журнале

Как правило, следующие исключения могут быть обнаружены непосредственно: Переполнение кучи: java.lang.OutOfMemoryError: Пространство кучи Java Переполнение стека: java.lang.StackOverflowError Переполнение области метода: java.lang.OutOfMemoryError: пространство PermGen

3.6. JVM Misc

3.6.1. Использование ЦП: загрузка ЦП.

система: какую долю времени процессор проводит в пространстве ядра. Выделение памяти, операции ввода-вывода, создание дочерних процессов... все это операции ядра.

3.6.2. нагрузка: балансировка нагрузки

Загрузка ЦП: Нагрузка представляет собой «среднее количество ожидающих процессов». К процессу ожидания загрузки будут добавлены только рабочее состояние (работает) и непрерывное состояние (прерываемое), а именно следующие две ситуации:

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

3.6.3. Потоки: количество потоков.

  • live: Текущее количество активных потоков (включая потоки-демоны и потоки, не являющиеся демонами);
  • damon threads:демонический поток(Текущая предыстория активностиизнить)
    • Потоки демонов также называются «служебными потоками». Он автоматически уйдет, когда не останется пользовательских потоков для обслуживания. Потоки, не являющиеся демонами, имеют более низкий приоритет.,Используется для предоставления услуг другим объектам и потокам в системе.
    • Поток сбора мусора — это классический поток демона.,Когда в нашей программе больше нет запущенных потоков, программа больше не будет генерировать мусор.,Сборщику мусора делать нечего.,Итак, когда поток сбора мусора является единственным потоком, оставшимся в JVM,Поток сбора мусора завершится автоматически. Он всегда работает в низкоуровневом состоянии,используется для Мониторинг в реальном времении Управляйте перерабатываемыми ресурсами в системе.
  • peak threads:пикценитьнить数

3.6.4. Статистика потоков: статус. Для понимания обратитесь к следующему рисунку:

НОВИНКА: поворотный стол для резьбы, которая еще не запущена.

RUNNABLE: состояние работоспособных потоков. Поток работает или получает интервалы времени ЦП.

BLOCKED: состояние потока заблокировано и ожидает блокировки монитора.

ОЖИДАНИЕ: состояние ожидающего потока.

TIMED_WAITING: состояние ожидающего потока с указанным временем ожидания. Состояние потока ожидания в течение указанного времени ожидания при вызове метода потока с указанным положительным временем ожидания.

TERMINATED: состояние завершенного потока.

3.6.5. Log Events

Количество журналов, зарегистрированных в минуту

3.6.6. Файл описания файловых дескрипторов.

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

Программа открывает существующий файл или создает новый файл, а ядро ​​возвращает процессу дескриптор файла.

open: количество файловых дескрипторов, открытых в данный момент JVM;

max: максимальное количество файловых дескрипторов, которые может открыть процесс JVM;

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ:

Приложения Java, частое чтение и запись операций ввода-вывода и создание слишком большого количества потоков приводят к высокой загрузке ЦП или бесконечному циклу, что в основном является причиной высокой загрузки ЦП.

Часто используемые команды в фоновом режиме:

jstack -1 pid # Распечатайте боевую информацию процесса и используйте код для поиска проблем, которые занимают процессор.

3.7. Garbage Collection

Индекс Garbage Collection используется для мониторинга сборки мусора Java-приложений.

3.7.1. Связанные понятия:

диаграмма коллекций

1、Metadata GC Порог относится к порогу GC пространства метаданных. В JVM пространство метаданных — это пространство, используемое для хранения метаданных, таких как информация о классах Java, пулы констант и информация о методах. Когда пространство метаданных заполнено, GC пространства метаданных будет запущен для переработки ненужной информации метаданных. Metadata GC пороговый индекс используется для мониторинга порога GC пространства метаданных. Когда использование пространства метаданных превышает пороговое значение, срабатывает сборщик мусора пространства метаданных. Метаданные GC пороговыйиндекс можно использовать для мониторинга использования пространства метаданных и влияния GC на пространство метаданных. 

 a)end of minor GC: представляет второстепенный Временная метка завершения сбора мусора, то есть временная отметка завершения сборки мусора нового поколения. В JVM количество сборщиков мусора в новом поколении намного больше, чем в старом, поэтому используется end of minor GCиндекс для описания ситуации с GC нового поколения. конец of minor GCиндекс можно использовать для мониторинга частоты и временного интервала работы ГХ нового поколения, а также эффективности и пропускной способности ГХ.

b) end of major GC: представляет основные Временная метка окончания GC, то есть временная отметка окончания сборки мусора в старом поколении. В JVM количество сборщиков мусора в старом поколении меньше, чем в новом поколении, но влияние сборщика мусора больше, поэтому используется end of major GCиндекс для описания ситуации с GC в старом поколении. конец of major GCиндекс Может использоваться для мониторинга старого поколенияGCизчастотаивременной интервал,И эффективность и пропускная способность GC.

2) ops/sec: операций в секунду.

3) allocation сбой: указывает количество ошибок выделения памяти во время процесса сборки мусора. распределение errorindex можно использовать для мониторинга использования памяти и влияния GC на использование памяти. если распределение индекс неудачи продолжает расти,значит не хватает памяти,Возможно, потребуется увеличить объем динамической памяти или оптимизировать схему использования памяти программой.

график длительности паузы: 

Указывает время паузы ГХ. Пауза GC означает, что выполнение приложения прерывается во время GC, и приложение не может выполнять какие-либо операции в течение этого периода.

Индекс продолжительности паузы можно использовать для мониторинга эффективности и пропускной способности GC, а также влияния GC на приложение.

Выделено/повышено

1) выделенный указывает размер объектов, выделенных новым поколением в текущем цикле сборки мусора;

2) «продвинутый» указывает размер объектов, продвигаемых в старом поколении в текущем цикле сборки мусора;

Выделенный/продвинутый индекс можно использовать для мониторинга использования памяти при сборке мусора и влияния GC на использование памяти.

3.7.2. Мониторинг показателей сборки мусора позволяет обнаружить следующие проблемы:

  1. Частый сбор мусора: в производственной среде, если метаданные GC пороговыйиндекс продолжает расти(конец of minor GC иend of major GC), это означает, что использование пространства метаданных слишком велико, что может повлиять на производительность приложения. GC пространства метаданных можно уменьшить, увеличив размер пространства метаданных или оптимизировав способ использования метаданных программой. Если скорость использования пространства метаданных слишком высока, это также может вызвать исключение OutOfMemoryError, которое требует своевременной настройки.
  2. Недостаточно памяти: если распределение индекс неудачи продолжает расти,значит не хватает памяти,Возможно, потребуется увеличить объем динамической памяти или оптимизировать схему использования памяти программой.
  3. Утечка памяти: если Коллекция Countиндекспродолжающийся рост,И никаких изменений в Commitedindex нет.,Тогда может произойти утечка памяти. Вы можете использовать инструменты анализа памяти, чтобы найти причину утечек памяти.,и сделать ремонт.
  4. Эффективность GC низкая: Индекс продолжительности паузы можно использовать для мониторинга эффективности и пропускной способности GC, а также влияния GC на приложение.

Подводя итог, отслеживая Garbage Collectionиндекс,Мы можем вовремя обнаружить и решить проблемы со сборкой мусора в Java-приложениях.,Улучшите производительность системы.

3.8. Classloading

Загруженный класс и Дельта класса — это два индекса виртуальной машины Java (JVM), используемые для измерения загрузки и выгрузки классов JVM.

Class loaded Индекс представляет общее количество классов, которые JVM загрузила с момента запуска. Этот индекс можно использовать, чтобы определить, есть ли в приложении проблемы с чрезмерной загрузкой классов. Если класс Если загруженный индекс растет слишком быстро, могут возникнуть такие проблемы, как утечки памяти или повторная загрузка классов.

Class delta Индекс представляет количество классов, динамически загруженных и выгруженных загрузчиком классов с момента последней сборки мусора. Этот индекс можно использовать для определения наличия дисбаланса в загрузке и выгрузке классов в приложении. Если класс deltaиндексизценить Слишком большой,Указывает, что слишком много классов загружается и выгружается.,Может привести к снижению производительности JVM.

В общем, Class loading иClass deltaindex можно использовать для мониторинга состояния загрузки и выгрузки классов JVM и помогать разработчикам обнаруживать и решать возможные проблемы с производительностью.

3.9. Buffer Pools

DirectBufferиMappedByteBufferдаJava NIO(New В IO есть два типа буферов), используемые для отображения памяти и прямого доступа к памяти. Эти два буфера имеют разные способы измерения проблем позиционирования в разных сценариях.

DirectBufferмераиндекс:

  1. Использование памяти. Отслеживая использование памяти DirectBuffer, вы можете понять, как приложение использует прямую память. Если использование памяти слишком велико, это может вызвать такие проблемы, как утечки памяти или OutOfMemoryError.
  2. Скорость выделения: отслеживая скорость выделения DirectBuffer.,Вы можете узнать, как часто ваше приложение использует прямую память. Если распределение происходит слишком быстро,Может привести к чрезмерному выделению памяти и переработке накладных расходов.,Тем самым снижая производительность системы.
  3. Скорость переработки. Отслеживая скорость переработки DirectBuffer, вы можете понять, как приложение освобождает прямую память. Если скорость переработки слишком низкая, это может вызвать такие проблемы, как утечки памяти или OutOfMemoryError. MappedByteBufferмераиндекс:
  4. Использование памяти: отслеживая использование памяти MappedByteBuffer, вы можете понять, как приложение использует сопоставление памяти. Если использование памяти слишком велико, это может вызвать такие проблемы, как утечки памяти или OutOfMemoryError.
  5. Производительность ввода-вывода: отслеживая производительность ввода-вывода MappedByteBuffer, вы можете понять производительность приложения с помощью сопоставления памяти. Если производительность ввода-вывода слишком низкая, производительность системы может снизиться.
  6. Частота попадания в кэш: отслеживая частоту попадания в кэш MappedByteBuffer, вы можете понять, как приложение использует кэш, отображенный в памяти. Если скорость попадания в кэш слишком низкая, это может привести к увеличению времени ввода-вывода, тем самым снижая производительность системы. Обнаружение проблемных сценариев:
  7. Если приложению необходимо часто читать и записывать большие объемы данных, рассмотрите возможность использования DirectBuffer для операций с памятью.
  8. Если вашему приложению необходимо использовать большое количество отображенных в память файлов, вы можете рассмотреть возможность использования MappedByteBuffer для операций с памятью.
  9. Если в вашем приложении есть утечки памяти или проблемы с производительностью,Вы можете обнаружить проблему, отслеживая соответствующий индекс.,и принять соответствующие меры по оптимизации. Например,проходить Уменьшите прямую памятьиз使用量или优化内存映射из Использованиеждатьспособ Улучшите производительность системы.

индекстрафарет:

https://grafana.com/search/?term=micrometer

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