Прометей, как получить реальное использование памяти Java Garbage Collector?
Плагин Prometheus в приложении Springboot отправляет тонны данных, я не нахожу никакого смысла в том, что я получаю от экспортера:
1) What does "jvm_gc_memory_allocated_bytes_total" mean?
2) What does "jvm_gc_memory_promoted_bytes_total" mean?
Что мне нужно, так это фактическое использование памяти Java Garbage Collector, поэтому я ожидаю, что значение всегда будет ниже 2 ГБ (максимальный объем памяти), но на данный момент составляет 8 ГБ и продолжает расти.
"jvm_gc_memory_allocated_bytes_total"
а также
"jvm_gc_memory_promoted_bytes_total"
являются единственными двумя переменными, связанными с Garbe Collector, поставляемыми экспортером.
1 ответ
Чтобы ответить на ваши вопросы, есть справочный текст, предоставленный с каждой выставленной метрикой в формате экспозиции Прометея:
# HELP jvm_gc_memory_allocated_bytes_total Incremented for an increase in the size of the young generation memory pool after one GC to before the next
# HELP jvm_gc_memory_promoted_bytes_total Count of positive increases in the size of the old generation memory pool before GC to after GC
Эти метрики накапливают выделенные байты в молодом поколении и продвигаемые байты, которые пережили сборку мусора, и, таким образом, они повышаются до старого поколения. (очень упрощенно)
Исходя из вашего вопроса, я думаю, что вы на самом деле ищете не "использование памяти Java Garbage Collector", а фактически использование управляемой памяти JVM. Эти управляемые части делятся на "кучу" и "не кучу" (area
тег) на первом уровне и может быть углублен в id
тег.
Вот метрики, которые вы, вероятно, ищете:
jvm_memory_used_bytes{area="heap|nonheap" id="<depends-on-gc-and-jvm>"}
jvm_memory_committed_bytes{area="heap|nonheap" id="<depends-on-gc-and-jvm>"}
jvm_memory_max_bytes{area="heap|nonheap" id="<depends-on-gc-and-jvm>"}
Поэтому, если вы хотите получить доступ к используемой в данный момент куче, вам нужно объединить метрики области кучи со следующим PromQL:
sum(jvm_memory_used_bytes{job="myjob", instance="myhost", area="heap"})