Ограничить доступные процессоры
Вопрос
Некоторое время назад при использовании Solaris у меня возникла проблема, заключавшаяся в том, что я хотел ограничить количество процессоров, которые могла видеть Java (это было возвращено Runtime.getRuntime().availableProcessors()
.Я думал, что у меня это есть, и мне дали кое-какую информацию для Linux, и я принял ее на веру.Мне сказали , что с помощью taskset
ограничило бы количество процессоров, которые будет использовать java (что верно, так и есть), но это не меняет того, что возвращается availableProcessors()
.
Я довольно долго искал, чтобы найти какой-то способ изменить это availableProcessors()
возвращаемое значение, и мне ничего не удалось найти.Кто-нибудь знает способ ограничить это или почему taskset -c 0,1 java -cp ./ Test
не сработало бы.
Test.java
public class Test {
public static void main(String args[]) {
System.out.println(Runtime.getRuntime().availableProcessors());
}
}
Ваше здоровье
Решение
Неудивительно, что taskset здесь не будет работать, поскольку это команда, которая задает параметры планировщика, тогда как у available Processors() не было бы никаких причин запрашивать планировщик.
Обратите внимание, что в вашем примере taskset не просто ограничивает вас двумя процессорами;это ограничивает вас двумя конкретными процессорами (0 и 1).
Интересно, можете ли вы использовать сквозную обработку (AOP) или генерацию байтового кода для переноса вызова availableProcessors()?