Java: ядра, доступные для JVM?

в Java есть метод Runtime.getRuntime().availableProcessors() который имеет следующий Javadoc:

возвращает количество процессоров доступных для виртуальной машины Java. Это значение может изменяться во время конкретного вызова виртуальной машины.

Как значение может измениться? При каких обстоятельствах для JVM будет доступно меньше процессоров, чем, например, физически установленных?

Джонас

4 ответов


команда Linux taskset(1) можно использовать, чтобы заставить процессы использовать определенный процессор или определенные наборы процессоров; довольно легко изменить запущенную программу, чтобы заставить ее использовать один или несколько процессоров. Например,

taskset -p `pidof java` --cpu-list 0,5,7,9-11

в Windows можно изменить количество ядер, которые приложение может использовать с помощью некоторых простых свойств. В виртуализированных средах вы также можете ограничить ядра виртуальной машиной, чтобы видеть только ядра, которые видит виртуальная машина. И в Linux / Unix вы можете установить сродство ядра, чтобы приложения или пользователи не могли использовать все ядра, поэтому возможно, что у вас может быть установлено больше ядер, чем видно JVM.

Примечание: это полезно для машин, выполняющих несколько заданий, где вы не хотите высокой конкуренции ресурсов, и вы хотите недооценить (или даже перепрофилировать) ресурсы.


на некоторых аппаратных средствах (серверах) возможно hotswap процессоры без перезагрузки системы. Это может привести к изменению количества процессоров. Хотя более распространенной причиной является, когда системный администратор изменил политику планирования процессора.


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

Почему вы даете меньше процессоров экземпляру JVM? Это зависит! возможно, вы размещаете tomcats и хотите распространять ресурсы, доступные вашим клиентам.

надеюсь, что это помогает.