Пара случайных мыслей, чтобы помочь вам.
JVM будет самостоятельно планировать задачи. Бывают случаи, когда JVM не считает, что один процессор перегружен, и может зарезервировать несколько ядер для критических операций. Поэтому вы видите, что некоторые ядра используются, а другие бездействуют.
Другая возможность состоит в том, что привязка к процессору должна быть явно установлена.
В Unix вы можете проверить, какой процессор JVM был выбран для использования с командой taskset ::
taskset -p <pid>
В Windows откройте диспетчер задач, перейдите на вкладку процесса, щелкните правой кнопкой мыши по процессу и выберите установить Affinity. Вы можете видеть, какие ЦП / Ядра установлены для использования.
Мне неизвестен параметр запуска в Java / Tomcat для управления загрузкой процессора. Я считаю, что это должно быть на уровне ОС. Я также не помню, чтобы когда-либо читал о кодируемой JVM, чтобы ограничить количество используемых процессоров / ядер.