OperatingSystemMXBean выдает странные значения для getProcessCpuLoad и getCommitedVirtualMemorySize в LinuxJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 OperatingSystemMXBean выдает странные значения для getProcessCpuLoad и getCommitedVirtualMemorySize в Linux

Сообщение Anonymous »

Я пытаюсь получить некоторые показатели о машине и процессе Java:
(Упрощенный код)

Код: Выделить всё

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 в Windows дает несколько правильные цифры (на этот раз).
GraalVM 21 – Java 11 в Debian выдает совершенно неверные цифры. Машина имеет 2 виртуальных ЦП и 4 ГБ ОЗУ (без подкачки), а выходные данные:

Код: Выделить всё

> RAM: 39077724160
> CPU: 1.0
> RAM: 4717985792
> CPU: 0.0
> RAM: 4717985792
> CPU: 1.0
Итак, насколько я понимаю, мой процесс варьируется от 0% до 100% загрузки ЦП, тогда как он в основном все время спит и имеет различное количество выделенной памяти от 4,5 ГБ до 37 ГБ ( больше, чем общая доступная память).
Используя 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 (я единственный, кто сталкиваюсь с этим?), или моя интерпретация этих чисел неверна?
Следует ли мне считать, что эти цифры явно неверны и что это ошибка в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»