Você normalmente usa taskset
para restringir um processo depois que ele é iniciado. Você pode usar o pidof java
para determinar o que o PID é para seu aplicativo Java e, em seguida, passá-lo para taskset
:
$ taskset -p $(pidof java) --cpu-list 0-2,5
OBSERVAÇÃO: Se você tiver 6 CPUs, 0,1,2,5 atribuirá uma afinidade a essas CPUs para o PID da sua JVM.
Tenha em mente que a afinidade não restringe outros processos de usar essas CPUs, taskset
se mais uma ferramenta de restringir um processo ou processos específicos a um conjunto específico de CPUs, não restringir a exclusividade.
taskset is used to set or retrieve the CPU affinity of a running process given its PID or to launch a new COMMAND with a given CPU affinity. CPU affinity is a scheduler property that "bonds" a process to a given set of CPUs on the system. The Linux scheduler will honor the given CPU affinity and the process will not run on any other CPUs. Note that the Linux scheduler also supports natural CPU affinity: the scheduler attempts to keep processes on the same CPU as long as practical for performance reasons. Therefore, forcing a specific CPU affinity is useful only in certain applications.
Alternativas
Esse eu respondeu a perguntas e respostas sobre o assunto: Como usar cgroups para limitar todos os processos, exceto whitelist para uma única CPU? abrange o tópico de como fazer isso usando cgroups.