powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / availableProcessors как поменять
13 сообщений из 13, страница 1 из 1
availableProcessors как поменять
    #38541232
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть следующая программа
Код: java
1.
2.
3.
4.
5.
public class Prob1 {
    public static void main(String[] args) throws InterruptedException{        
        System.out.println("availableProcessors = "+Runtime.getRuntime().availableProcessors());        
    }
}



есть документация на этот метод из javadoc: Returns the number of processors available to the Java virtual machine. This value may change during a particular invocation of the virtual machine. Applications that are sensitive to the number of available processors should therefore occasionally poll this property and adjust their resource usage appropriately. </p>

я зупускаю ее так:
> taskset 0x00000001 java -jar JavaApplication1.jar
availableProcessors = 4

А хочется, чтобы написало 1. Как это сделать?
...
Рейтинг: 0 / 0
availableProcessors как поменять
    #38541241
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из коробки управления нет, есть стороннее решения
http://www.scalabiliti.com/blog/java_jvm_processor_affinity
гуглить CPU affinity
Можешь попробовать через Task Manager назначить только один CPU и проверить результат после этого.
...
Рейтинг: 0 / 0
availableProcessors как поменять
    #38541273
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про taskset гугл говорит, что можно выхватить все потоки процесса и их уже прибиндить к ядру
http://www.velocityreviews.com/forums/t667701-setting-the-cpu-affinity-for-a-whole-jvm-on-linux.html
...
Рейтинг: 0 / 0
availableProcessors как поменять
    #38541274
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Основной смысел вот в этой фразе:
...Applications that are sensitive to the number of available processors should therefore occasionally poll this property and adjust their resource usage appropriately ...
Отседова вывод - нефиг подменять понятия - нужно правильно организовывать работу с используемыми ресурсами в рамках доступного количества процессоров...

А хочется, чтобы написало 1. Как это сделать?С помощью класса Runtime - никак ибо
Код: plaintext
An application cannot create its own instance of this class.
...
Рейтинг: 0 / 0
availableProcessors как поменять
    #38541289
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, да. Возможность влиять на результат этого метода ещё и сильно зависит от операционной системы.
...
Рейтинг: 0 / 0
availableProcessors как поменять
    #38542552
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
taskset прекрасно биндит все процессы к ядру той командой, что я написал.

код

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public class Prob1 {
    public static void main(String[] args) throws InterruptedException{        
        System.out.println("availableProcessors = "+Runtime.getRuntime().availableProcessors());
        ArrayList<Thread> al = new ArrayList();
        for(int i=0; i<Runtime.getRuntime().availableProcessors(); i++){
            Thread t = new CycleThread();
            t.start();
            al.add(t);
        }
        
        al.get(0).join();
    }
}


class CycleThread extends Thread{

    @Override
    public void run() {
        while(true);
    }
    
}



Наблюдаю загруженность ядер через top (нажать единицу). Если просто запустить - грузит все 4 ядра, если запустить через taskset 0x00000001 java -jar JavaApplication1.jar , то грузит только первое ядро.

Проблема в том, что taskset только биндит потоки к ядрам, но не информирует об этом Runtime. В результате Runtime ничего об этом биндинге не знает, и думает, что ядер все еще 4.
...
Рейтинг: 0 / 0
availableProcessors как поменять
    #38542556
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz сильно зависит от операционной системы.

Тогда считаем что система - убунта.
...
Рейтинг: 0 / 0
availableProcessors как поменять
    #38542562
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
int os::active_processor_count() {
  // Linux doesn't yet have a (official) notion of processor sets,
  // so just return the number of online processors.
  int online_cpus = ::sysconf(_SC_NPROCESSORS_ONLN);
  assert(online_cpus > 0 && online_cpus <= Linux::processor_count(), "sanity check");
  return online_cpus;
}
...
Рейтинг: 0 / 0
availableProcessors как поменять
    #38542564
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по этому коду - никак. Только если на уровне ОС отключить отдельные процессоры. Можно переписать на _SC_NPROCESSORS_CONF и пересобрать OpenJDK
...
Рейтинг: 0 / 0
availableProcessors как поменять
    #38542569
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, это из исходников старого билда Java 6.
Я смотю в OpenJDK уже что меняли на эту тему.
В os_linux.cpp используется и _SC_NPROCESSORS_CONF тоже.
...
Рейтинг: 0 / 0
availableProcessors как поменять
    #38542767
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapok,

А можно нескромный вопросер: нафига это надо-то, а?
...
Рейтинг: 0 / 0
availableProcessors как поменять
    #38545750
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КриптоПро JCP - если доступных процов более четырёх, обязательно требуется серверная лицензия приличной стоимости.
...
Рейтинг: 0 / 0
availableProcessors как поменять
    #38545832
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный ответ: нефига заниматься фигнёй.
Поэтому советы "как сделать" были излишне, и хорошо, что они не помогают, а то кто-нибудь действительно стал бы делать советуемое.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / availableProcessors как поменять
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]