Использование ЦП Java VisualVM и сходство процессоров

По моему сегодняшнему опыту я обнаружил, что Oracle Java VisualVM показывает использование ЦП в процентах от общего числа ядер машины, даже если отслеживаемая JVM имеет ограниченное сходство процессов, установленное в ОС. Это во вкладке "монитор".

Ограничение отслеживаемого jvm с помощью taskset (в Linux, Ubuntu), когда процессоры, разрешенные для этого jvm, используются почти на 100% в htop, процент ЦП, показанный в VisualVM, явно равен общему количеству ЦП, деленному на количество разрешенных процессоров. к отслеживаемому jvm. Поэтому разрешение шкалы для этого случая недостаточно.

Можете ли вы подтвердить, что наблюдали то же самое в других операционных системах или вообще?

Есть ли способ иметь учетную запись VisualVM только для ядер, назначенных сходством, при отображении использования ЦП?


person matanster    schedule 04.03.2016    source источник


Ответы (1)


Согласно исходный код VisualVM, загрузка ЦП действительно рассчитывается как общее время ЦП, деленное на количество процессоров:

    long processCpuTime = tracksProcessCpuTime ?
        model.getProcessCpuTime() / processorsCount : -1;

где processorsCount получается из OperatingSystemMXBean:

    OperatingSystemMXBean osbean = mxbeans.getOperatingSystemMXBean();
    if (osbean != null) processorsCount = osbean.getAvailableProcessors();

Имелась давняя ошибка JVM JDK-6515172, из-за которой сходство процессов не учитывался, т. е. getAvailableProcessors всегда возвращал общее количество процессоров независимо от наборов задач. Это было характерно для Linux и BSD; нормально работал на Solaris и Windows.

Около месяца назад эта ошибка была окончательно устранена. Однако исправление предназначено только для JDK 9.

Посмотрите на этот вопрос для возможных обходные пути. Хотя они какие-то некрасивые.

person apangin    schedule 12.03.2016