(Упрощенный код)
Код: Выделить всё
final OperatingSystemMXBean os = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
while(true) {
System.out.println("> RAM: " + os.getCommittedVirtualMemorySize());
System.out.println("> CPU: " + os.getProcessCpuLoad());
Thread.sleep(1000);
}
GraalVM 21 – Java 11 в Debian выдает совершенно неверные цифры. Машина имеет 2 виртуальных ЦП и 4 ГБ ОЗУ (без подкачки), а выходные данные:
Код: Выделить всё
> RAM: 39077724160
> CPU: 1.0
> RAM: 4717985792
> CPU: 0.0
> RAM: 4717985792
> CPU: 1.0
Используя top, pmap, /proc/meminfo, smem и другие, все что указывает на то, что процесс простаивает и использует около 175 МБ памяти...
Код: Выделить всё
# smem -r -k
PID User Command Swap USS PSS RSS
47246 root /jre/bin/java - 0 174.9M 175.3M 177.6M
# top
%Cpu(s): 0.1 us, 0.0 sy, 0.0 ni, 99.8 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
47246 root 20 0 4607408 179928 42796 S 0.3 4.6 0:49.22 java
Следует ли мне считать, что эти цифры явно неверны и что это ошибка в JRE (я единственный, кто сталкиваюсь с этим?) или моя интерпретация этих чисел неверна?
p>
Для справки:
double OperatingSystemMXBean.getProcessCpuLoad()
Возвращает «недавнее использование процессора» для процесса виртуальной машины Java. Это значение равно двойному значению в интервале [0.0,1.0]. Значение 0,0 означает, что ни один из ЦП не запускал потоки процесса JVM в течение последнего наблюдаемого периода времени, а значение 1,0 означает, что все ЦП активно выполняли потоки процесса JVM в течение 100 % времени в течение последнего наблюдаемого периода. Потоки JVM включают в себя потоки приложений, а также внутренние потоки JVM. Возможны все значения от 0,0 до 1,0 в зависимости от действий, происходящих в процессе JVM и во всей системе. Если данные о недавнем использовании ЦП виртуальной машины Java недоступны, метод возвращает отрицательное значение.
long OperatingSystemMXBean. getCommitedVirtualMemorySize()
Возвращает объем виртуальной памяти, которая гарантированно будет доступна работающему процессу, в байтах или -1, если эта операция не поддерживается.
Подробнее здесь: https://stackoverflow.com/questions/790 ... nd-getcomm
Мобильная версия