Несоответствие между метрикой "jvm.memory.max" Spring Actuator и Runtime.getRuntime(). MaxMemory()

Я пробую Spring Boot Actuator и смотрю на конечную точку "/actuator/metrics/jvm.memory.max".

Я также запускаю приложение Springboot со следующей опцией JVM:

-Xmx104m

Я создал конечную точку ("/memory", которая возвращает Total, Free, Used & Max memory для приложения. Я использовал для этого методы Runtime.getRuntime(). GetXXX().

Вопрос, который у меня возник, заключается в том, что значение Springboot "jvm.memory.max", отображаемое в байтах, не соответствует значению -Xmx и тому, что конечная точка "/ memory" показывает мне.

Есть мысли, почему это несоответствие?

1 ответ

Решение

Spring Boot использует Micrometer для поддержки метрик. jvm.memory.max метрика создается классом JvmMemoryMetrics компании Mirometer с использованием MemoryPoolMXBean.getUsage().getMax(),

MemoyPoolMXBean предоставляет информацию как о куче, так и не куче памяти, и Micrometer разделяет их с помощью тегов на jvm.memory.max Метрика. В выводе, показанном в вопросе, это значение представляет собой кучу и не кучу памяти, поэтому это не то же самое, что специфичное для кучи значение, настроенное с помощью -Xmx,

Вы можете перейти к метрике, используя ее теги и параметры запроса. Это описано в документации на привод. Например, чтобы получить максимальную кучу памяти, вы должны использовать http://localhost:9001/actuator/metrics/jvm.memory.max?tag=area:heap.

Другие вопросы по тегам