Несоответствие между метрикой "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.