При использовании java-приложений в контейнерах, которым необходимо ограничивать ресурсы, возникает необходимость в точном определении количества используемой памяти Java-машиной
В первых двух частях (Часть 2 Часть 1) разбирались принципы выделения памяти. В третьей, закючительной, будут рассмотрены способы получения размеров отдельных областей памяти с помощью mbean и NMT
Подготовительные работы
- Включаем
NativeMemoryTracking, добавляя соответствующие ключи
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr007.html
-XX:NativeMemoryTracking=summary
или
-XX:NativeMemoryTracking=detail
- Снимаем статстику
/opt/oracle/java/latest/bin/jcmd 29 VM.native_memory summary
примерный вывод.
Total: reserved=20272361KB, committed=19037005KB
- Java Heap (reserved=17825792KB, committed=17825792KB)
(mmap: reserved=17825792KB, committed=17825792KB)
- Class (reserved=1097201KB, committed=54769KB)
(classes #
9178
)
(malloc=1521KB #
19960
)
(mmap: reserved=1095680KB, committed=53248KB)
- Thread (reserved=129906KB, committed=129906KB)
(thread #
359
)
(stack: reserved=127640KB, committed=127640KB)
(malloc=1175KB #
1820
)
(arena=1091KB #
716
)
- Code (reserved=261351KB, committed=68431KB)
(malloc=11751KB #
12492
)
(mmap: reserved=249600KB, committed=56680KB)
- GC (reserved=134795KB, committed=134795KB)
(malloc=68983KB #
503
)
(mmap: reserved=65812KB, committed=65812KB)
- Compiler (reserved=804KB, committed=804KB)
(malloc=673KB #
1296
)
(arena=131KB #
3
)
- Internal (reserved=522778KB, committed=522774KB)
(malloc=522742KB #
41658
)
(mmap: reserved=36KB, committed=32KB)
- Symbol (reserved=11660KB, committed=11660KB)
(malloc=10182KB #
92944
)
(arena=1479KB #
1
)
- Native Memory Tracking (reserved=2973KB, committed=2973KB)
(malloc=237KB #
3598
)
(tracking overhead=2736KB)
- Arena Chunk (reserved=546KB, committed=546KB)
(malloc=546KB)
- Unknown (reserved=284556KB, committed=284556KB)
(mmap: reserved=284556KB, committed=284556KB)
Получение результатов.
В таблице перечислены основные потребители памяти. Для большинства из них существуют MBean, с помошью которых можно получить искомое значение и включать NMT не бязательно.область памяти | MBean | |||||||
---|---|---|---|---|---|---|---|---|
Java Heap | java.lang Memory HeapMemoryUsage.max | |||||||
Thread | java.lang Threading PeakThreadCount | |||||||
Code | java.lang MemoryPool Code Cache Usage.max (reserved) java.lang MemoryPool Code Cache Usage.commited (commited) | java.lang Memory NonHeapMemory Usage.committed (committed) | ||||||
Class | java.lang MemoryPool Metaspace Usage.max (reserved)java.lang MemoryPool Metaspace Usage.commited (commited) | |||||||
CompressedClassSpace | java.lang MemoryPool Compressed Class Space Usage.max (reserved) java.lang MemoryPool Compressed Class Space Usage.committed (commited) | |||||||
Symbol | ||||||||
BufferPool | jmx["java.nio:type=BufferPool,name=direct",MemoryUsed] | |||||||
GC | ||||||||
Unknown | ||||||||
Java Heap
Размер Haep должен быть ограничен ключом -Xmx.Для оценки верхней границы области памяти heap берётся значение этого этого ключа или соответствующего mbean.
Class
Метаинформация классов и, если HEAP меньше 32Гб, область для хранения соответствия сжатых указателей. Для ограничения занимаемого этой областью памяти размера необходимо:задать -XX:CompressedClassSpaceSize
задать -XX:MaxMetaspaceSize
- Class (reserved=1146767KB, committed=110607KB) (classes # 19918 ) (malloc=1935KB # 27656 ) (mmap: reserved=1144832KB, committed=108672KB) |
Для оценки верхней границы области памяти используется максимальное значение за продолжительное время работы JVM, снятое под характерной нагрузкой (committed)
Thread
Размер занимаемой памяти стэками потоков. Размер стэка для потока задаётся ключом -XssТекущее значение можно посмотреть в ps -ef | grep Xss --color
Если не задано, default-значение можно посмотреть так:
/opt/oracle/java/latest/bin/java -XX:+PrintFlagsFinal -version | grep ThreadStackSize
|
Память под стэки трэдов (Mb) = VMThreadStackSize*Number Of Threads/1024
Для оценки верхней границы потребления памяти необходимо брать значение максимального кол-во трэдов за период работы.
Комментариев нет:
Отправить комментарий