Я пытаюсь отслеживать общий объем памяти, выделенный моему приложению Java (OpenJDK 11.0.4) операционной системой (Linux Ubuntu 19.04).
Я делаю два подхода:
- Использование размера VmRSS из
ps
или cat /proc/<pid>/status | grep VmRSS
- Использование функции Java NativeMemoryTracking со следующими свойствами:
-XX:NativeMemoryTracking=summary -XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics
и использование общего зафиксированного размера.
Числа, полученные изоба подхода всегда различны (иногда из нескольких мегабайт ... иногда намного больше).
Я понимаю, что размер VmRSS, сообщаемый ОС, является реальной памятью, используемой процессом, но почему JavaNTM сообщает о другом значении?
Если я хочу иметь возможность контролировать размер резидентного набора приложения Java, следует ли мне полагаться на сообщенный размер ОС (VmRSS) или могу ли я использовать что-то внутри JVM (например,НТМ)? В идеале я хочу иметь возможность контролировать размер RSS моего Java-приложения из самого себя ...