последовательность
В этой статье в основном изучается отслеживание встроенной памяти HotSpot VM.
Native Memory Tracking
Java8 представляет функцию отслеживания собственной памяти (NMT) для виртуальной машины HotSpot, которую можно использовать для отслеживания использования внутренней памяти JVM.
использовать
включи
-XX:NativeMemoryTracking=summary
Используйте -XX:NativeMemoryTracking=summary, чтобы включить NMT, где значение по умолчанию выключено, и для включения можно установить сводку или детализацию; если включено, это увеличит потребление производительности на 5–10 %.
Проверять
/ # jcmd 1 VM.native_memory summary
/ # jcmd 1 VM.native_memory summary scale=MB
Используйте jcmd pid VM.native_memory для просмотра и добавления сводки или подробностей позже.Если сводка включена, можно использовать только сводку; параметр масштаба может указывать единицу отображения, которая может быть КБ, МБ или ГБ
Создать базовый уровень
/ # jcmd 1 VM.native_memory baseline
1:
Baseline succeeded
После создания базовой линии вы можете использовать файл summary.diff для сравнения
просмотреть разницу
/ # jcmd 1 VM.native_memory summary.diff
Используйте summary.diff, чтобы просмотреть статистику по сравнению с базовым уровнем.
выход при выключении
-XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics
Используйте приведенную выше команду для вывода общей статистики собственной памяти при завершении работы jvm.
закрытие
/ # jcmd 1 VM.native_memory shutdown
1:
Native memory tracking has been turned off
Используйте jcmd pid VM.native_memory shutdown можно использовать для закрытия NMT; обратите внимание, что после использования jcmd для закрытия, похоже, нет соответствующей команды jcmd для открытия
пример
/ # jcmd 1 VM.native_memory summary scale=MB
1:
Native Memory Tracking:
Total: reserved=2175MB, committed=682MB
- Java Heap (reserved=501MB, committed=463MB)
(mmap: reserved=501MB, committed=463MB)
- Class (reserved=1070MB, committed=50MB)
(classes #8801)
( instance classes #8204, array classes #597)
(malloc=2MB #24660)
(mmap: reserved=1068MB, committed=49MB)
( Metadata: )
( reserved=44MB, committed=43MB)
( used=42MB)
( free=1MB)
( waste=0MB =0.00%)
( Class space:)
( reserved=1024MB, committed=6MB)
( used=5MB)
( free=0MB)
( waste=0MB =0.00%)
- Thread (reserved=228MB, committed=27MB)
(thread #226)
(stack: reserved=227MB, committed=26MB)
(malloc=1MB #1139)
- Code (reserved=243MB, committed=17MB)
(malloc=1MB #5509)
(mmap: reserved=242MB, committed=16MB)
- GC (reserved=23MB, committed=15MB)
(malloc=8MB #11446)
(mmap: reserved=16MB, committed=7MB)
- Compiler (reserved=26MB, committed=26MB)
(malloc=2MB #1951)
(arena=24MB #13)
- Internal (reserved=5MB, committed=5MB)
(malloc=3MB #9745)
(mmap: reserved=2MB, committed=2MB)
- Other (reserved=2MB, committed=2MB)
(malloc=2MB #202)
- Symbol (reserved=10MB, committed=10MB)
(malloc=8MB #233939)
(arena=3MB #1)
- Native Memory Tracking (reserved=5MB, committed=5MB)
(tracking overhead=5MB)
- Arena Chunk (reserved=63MB, committed=63MB)
(malloc=63MB)
- Видно, что вся память в основном включает Java Heap, Class, Thread, Code, GC, Compiler, Internal, Other, Symbol, Native Memory Tracking, Arena Chunk; среди них зарезервированные указывают на объем памяти, доступный приложению, и зафиксированные указывает, что приложение использует объем памяти
- Часть кучи Java представляет занимаемую в настоящее время память кучи 463 МБ; часть класса представляет количество уже загруженных классов 8801, которые занимают метаданные 50 МБ; часть потока 225 представляет текущий поток, занимающий 27 МБ; часть генерации кода представляет собой JIT или буфер, инструкции занимают 17 МБ ; В части GC говорится, что было занято 15 МБ памяти, используемой для помощи GC; Раздел кода представляет, что компилятор генерирует код, занимая 26 МБ; Внутренний раздел указывает, что синтаксический анализ командной строки, JVMTI и, таким образом, занимает 5 МБ; Другой раздел представляет Не классифицировано занимает 2 МБ; символ представляет собой часть, такую как таблица строк, а константный пул занимает другой символ 10 МБ; часть Native Memory Tracking представляет саму функцию, занимающую 5 МБ; часть Arena Chunk представляет фрагмент арены, занимающий 63 МБ
- Арена представляет собой фрагмент памяти, выделенный malloc.Эти фрагменты могут использоваться в качестве временной памяти другими подсистемами, такими как выделение памяти перед потоком, и его освобождение памяти является массовым.
резюме
- Java8 представляет функцию отслеживания собственной памяти (NMT) для виртуальной машины HotSpot, которую можно использовать для отслеживания использования внутренней памяти JVM.
- Использовать -XX:NativeMemoryTracking=summary можно использовать для включения NMT, где значение по умолчанию выключено, вы можете включить сводку и детализацию; если включено, это увеличит потребление производительности на 5%-10%; используйте -XX: +UnlockDiagnosticVMOptions — XX:+PrintNMTStatistics может выводить общую статистику собственной памяти при завершении работы jvm; другие могут использовать команды jcmd pid VM.native_memory, связанные с просмотром, сравнением, завершением работы и т. д.
- Вся память в основном включает Java Heap, Class, Thread, Code, GC, Compiler, Internal, Other, Symbol, Native Memory Tracking, Arena Chunk; среди них зарезервировано означает размер памяти, доступный для приложения, зафиксировано означает память, которую приложение использует размер