JVM использует только половину ядра на сервере - PullRequest
5 голосов
/ 16 января 2020

У меня есть ряд Java процессов, использующих OpenJDK 11, работающих на Windows Сервер 2019. Сервер имеет два физических процессора и 36 ядер всего; это машина HP. Когда я запускаю свои процессы, я вижу распределение работы в диспетчере задач по всем ядрам. Это хорошо. Однако после того, как процессы выполняются в течение некоторого периода времени, а не определенного времени, машина начинает использовать только половину ядер.

Я работаю над несколькими теориями:

  1. У JDK есть некоторая проблема, которая не позволяет ему постоянно обращаться ко всем ядрам.

  2. Что-то с Windows Сервер 2019 вызывает проблему, ограничивая Java от доступ ко всем ядрам.

  3. Существует проблема управления температурой, и один процессор перегревается, а ОС направляет всю обработку на другой процессор.

  4. Существует некоторая проблема с гиперпоточностью и «логическими» процессорами, из-за которой процесс не может использовать все ядра.

Я пробовал поиск JDK проблем и не нашел ничего подобного упомянутому. Я спустился на сервер, и пока он работал немного тепло, он не выглядел чрезмерно горячим. Я еще не пробовал отключать гиперпоточность. Я пробовал ряд параметров, чтобы заставить JVM использовать все ядра, и действительно, процесс изначально использует все ядра; Я вижу активность в диспетчере задач.

У кого-нибудь есть мысли? Это действительно непонятная проблема, и я буду признателен за любые идеи.

ОБНОВЛЕНИЕ: я могу заставить его использовать другой процессор с помощью диспетчера задач, чтобы назначить один из процессов java .exe для другой процессор. Это также работает из вызова java в командной строке, а также с аргументом, для которого используется сокет.

Теперь все равно, что это похоже на хак. Я не понимаю, почему мне нужно вручную назначать сокет каждому из моих java процессов; эту работу следует оставить ОС. Я до сих пор не уверен, где именно проблема, если это ОС или что.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...