Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / Runtime.getRuntime().availableProcessors() / 15 сообщений из 15, страница 1 из 1
01.07.2019, 12:33
    #39832215
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime.getRuntime().availableProcessors()
Всем привет!

Две машины с одинаковым 2-х ядерным процессором. На одной стоит Win10, на другой - Linux (CentOS7)

Runtime.getRuntime().availableProcessors():
- на Win10 выводит 4
- на Linux (CentOS7) 2

Винда, как я понимаю выводит количество потоков (обычно это ядра*2), а линукс фактическое количество ядер. Или я ошибаюсь?
Есть универсальный способ определения кол-ва процессоров?
...
Рейтинг: 0 / 0
01.07.2019, 12:42
    #39832219
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime.getRuntime().availableProcessors()
Molasar, а вы прямо в код првалитесь, там, насколько я помню, будет комментарий о том, как различаются понятие "процессоров" у винды и линукса.
...
Рейтинг: 0 / 0
01.07.2019, 12:51
    #39832224
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime.getRuntime().availableProcessors()
Т.е. как настроили JVM на конкретной машине, то и показывает?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
/**
     * Returns the number of processors available to the Java virtual machine.
     *
     * <p> 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>
     *
     * @return  the maximum number of processors available to the virtual
     *          machine; never smaller than one
     * @since 1.4
     *
    public native int availableProcessors();

ОзверинMolasar, а вы прямо в код првалитесь, там, насколько я помню, будет комментарий о том, как различаются понятие "процессоров" у винды и линукса.
...
Рейтинг: 0 / 0
01.07.2019, 12:54
    #39832225
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime.getRuntime().availableProcessors()
Molasar, ну там суть такая, что ява использует средства ос для определения кол-ва процессоров. и В винде оно возвращает с учетом гипертрединга, а в линуксе - похожу, только физические ядра

https://linux.die.net/man/3/sysconf - _SC_NPROCESSORS_ONLN
...
Рейтинг: 0 / 0
01.07.2019, 14:22
    #39832286
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime.getRuntime().availableProcessors()
Molasar, универсального способа нет. Каждая операционка вкладывает свой смысл в термины процессор, ядро и thread.
Вы для себя сами решаете что правильно. Исходя из вашей задачи. Задачу я надеюсь вы понимаете.

Более того. Intel и AMD на коробке изделия могут слегка нас обманывать и выдавать одни цифры за другие.

По вашему вопросу. Самое простое - посмотреть в переменные окружения.

Например у меня под десятой виндой.

Код: java
1.
2.
3.
4.
5.
$ set
NUMBER_OF_PROCESSORS=8
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 
PROCESSOR_LEVEL=6



Вообще такой параметру лучше задавать вручную (! если это важно) т.к. современные среды виртуализации
могут быть очень хитрыми. Тактовая частота может плавать. И собственно сведения которые вы соберете
из getRuntime() или из еще каких-то источников не сильно могут отражать действительность.

Если вы решили выбрать размер пула потоков исходя из availableProcessors - то это скорее всего будет
неправильный выбор. Для большинства задач количество тредов слабо связано с процессорами. Особенно
если ваши треды большую часть времени будут стоять в ожидании блокера.
...
Рейтинг: 0 / 0
01.07.2019, 14:25
    #39832290
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime.getRuntime().availableProcessors()
mayton
Если вы решили выбрать размер пула потоков исходя из availableProcessors - то это скорее всего будет
неправильный выбор. Для большинства задач количество тредов слабо связано с процессорами. Особенно
если ваши треды большую часть времени будут стоять в ожидании блокера.

Не совсем правильно. availableProcessors - это некая база, от которой надо отталкиваться для расчетов, введя поправочные коэффициенты на свою задачу CPU bound/ IO bound.
...
Рейтинг: 0 / 0
01.07.2019, 14:46
    #39832313
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime.getRuntime().availableProcessors()
...
Рейтинг: 0 / 0
01.07.2019, 14:53
    #39832326
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime.getRuntime().availableProcessors()
Да. Докеры и виртуалки. Тоже требуют внимания.
...
Рейтинг: 0 / 0
01.07.2019, 15:16
    #39832349
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime.getRuntime().availableProcessors()
Андрей ПанфиловОзверин https://linux.die.net/man/3/sysconf - _SC_NPROCESSORS_ONLNИнфа неактуальная: https://bugs.openjdk.java.net/browse/JDK-8140793 или https://bugs.openjdk.java.net/browse/JDK-6515172

если до сих пор выдает - значит актуальна?
...
Рейтинг: 0 / 0
02.07.2019, 14:27
    #39832775
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime.getRuntime().availableProcessors()
Озверин...и В винде оно возвращает с учетом гипертрединга, а в линуксе - похожу, только физические ядра...
Х.з. На Ubundu у меня все возврашалось корректно

И в такие "выкрутасы" не сильно верится.

Что выводит команда top? Сколько ядер/процессоров

Возможно у автора гипер трейдинг банально выключен и процессоров (ядер) только 2-е штуки.
...
Рейтинг: 0 / 0
02.07.2019, 18:19
    #39832963
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime.getRuntime().availableProcessors()
Количество ядер мне необходимо для расчета количества соединений с БД через пул хикари. Каждое соединение в отдельном потоке.
У Оракла читал, что оптимальный вариант 2 * Ядра + 1. На практике это подтверждается.
В настройках по умолчанию хочу выставлять количество потоков, рассчитанное по этой формуле.
Можно и в ручную задать этот параметр.


maytonMolasar, универсального способа нет. Каждая операционка вкладывает свой смысл в термины процессор, ядро и thread.
Вы для себя сами решаете что правильно. Исходя из вашей задачи. Задачу я надеюсь вы понимаете.

Более того. Intel и AMD на коробке изделия могут слегка нас обманывать и выдавать одни цифры за другие.

По вашему вопросу. Самое простое - посмотреть в переменные окружения.

Например у меня под десятой виндой.

Код: java
1.
2.
3.
4.
5.
$ set
NUMBER_OF_PROCESSORS=8
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 
PROCESSOR_LEVEL=6



Вообще такой параметру лучше задавать вручную (! если это важно) т.к. современные среды виртуализации
могут быть очень хитрыми. Тактовая частота может плавать. И собственно сведения которые вы соберете
из getRuntime() или из еще каких-то источников не сильно могут отражать действительность.

Если вы решили выбрать размер пула потоков исходя из availableProcessors - то это скорее всего будет
неправильный выбор. Для большинства задач количество тредов слабо связано с процессорами. Особенно
если ваши треды большую часть времени будут стоять в ожидании блокера.
...
Рейтинг: 0 / 0
02.07.2019, 18:30
    #39832966
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime.getRuntime().availableProcessors()
Premature optimization is the root of all evil. У тебя почти гарантированно в коде найдется масса мест, где что-то делается на столько не оптимально, что кол-во коннектов в пуле будет по сравнению с этим мелочью. Какой смысл сейчас на этапе разработки проекта тратить время на возню с высчитыванием оптимального размера пула, оптимального кол-ва работников и т.д.? Если будет доказано, что именно эти места являются узким местом - тогда и прикинешь оптимальную конфигурацию.
...
Рейтинг: 0 / 0
02.07.2019, 18:50
    #39832975
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime.getRuntime().availableProcessors()
Пусть автор сначала приведет скриншоты системных утилит Unix (хотя бы top), где было бы видно РЕАЛЬНОЕ кол-во процессоров в системе, а не его хотелки, что должно быть как-бы 4.
...
Рейтинг: 0 / 0
02.07.2019, 19:04
    #39832981
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime.getRuntime().availableProcessors()
lscpu
И не скриншоты - текст из консоли замечательно копируется в два клика мыши.
...
Рейтинг: 0 / 0
02.07.2019, 19:07
    #39832982
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Runtime.getRuntime().availableProcessors()
MolasarКоличество ядер мне необходимоподумай.
Все настойчиво тебе говорят что нет связи прямой Коннект-Ядро.
Если надо, то выведи в глобальную статик константу или конфиг.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Runtime.getRuntime().availableProcessors() / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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