Java: ядра доступны для JVM?
В Java есть метод Runtime.getRuntime().availableProcessors()
который имеет следующий Javadoc:
Возвращает количество процессоров, доступных для виртуальной машины Java. Это значение может измениться во время определенного вызова виртуальной машины.
Как значение может измениться? При каких обстоятельствах будет меньше процессоров, доступных для JVM, чем физически установлено, например?
Jonas
4 ответа
Команда Linux taskset(1)
может использоваться для принудительного использования процессами определенного ЦП или определенных наборов ЦП; довольно легко модифицировать работающую программу, чтобы принудительно перевести ее на один или несколько процессоров. Например,
taskset -p `pidof java` --cpu-list 0,5,7,9-11
В Windows можно изменить количество ядер, которые разрешено использовать приложению, с помощью некоторых простых свойств. В виртуализированных средах вы также можете ограничить количество ядер для виртуальной машины, чтобы видеть только те ядра, которые видит виртуальная машина. А в Linux/Unix вы можете установить привязку к ядру, чтобы приложения или пользователи не могли использовать все ядра, поэтому возможно, что у вас установлено больше ядер, чем видно JVM.
Примечание. Это полезно для компьютеров, на которых выполняется несколько заданий, когда вы не хотите высокой конкуренции за ресурсы и хотите недооценивать (или даже переоценивать) ресурсы.
На некоторых устройствах (серверах) можно загружать процессоры без перезагрузки системы. Это может привести к изменению количества процессоров. Хотя более распространенной причиной является то, что системный администратор изменил политику планирования процессора.
Вы можете настроить ресурсы, доступные для приложений java, с помощью параметров команды java. Я на самом деле не знаю точное название переключателей, но вы можете настроить кучу вещей.
Почему вы бы отдавали меньше процессоров экземпляру JVM? Это зависит! возможно, вы размещаете tomcats и хотите распространять ресурсы, доступные вашим клиентам.
Надеюсь это поможет.