powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Runtime.getRuntime().availableProcessors()
15 сообщений из 15, страница 1 из 1
Runtime.getRuntime().availableProcessors()
    #39832215
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

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

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

Винда, как я понимаю выводит количество потоков (обычно это ядра*2), а линукс фактическое количество ядер. Или я ошибаюсь?
Есть универсальный способ определения кол-ва процессоров?
...
Рейтинг: 0 / 0
Runtime.getRuntime().availableProcessors()
    #39832219
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar, а вы прямо в код првалитесь, там, насколько я помню, будет комментарий о том, как различаются понятие "процессоров" у винды и линукса.
...
Рейтинг: 0 / 0
Runtime.getRuntime().availableProcessors()
    #39832224
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. как настроили 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
Runtime.getRuntime().availableProcessors()
    #39832225
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar, ну там суть такая, что ява использует средства ос для определения кол-ва процессоров. и В винде оно возвращает с учетом гипертрединга, а в линуксе - похожу, только физические ядра

https://linux.die.net/man/3/sysconf - _SC_NPROCESSORS_ONLN
...
Рейтинг: 0 / 0
Runtime.getRuntime().availableProcessors()
    #39832286
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Runtime.getRuntime().availableProcessors()
    #39832290
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Если вы решили выбрать размер пула потоков исходя из availableProcessors - то это скорее всего будет
неправильный выбор. Для большинства задач количество тредов слабо связано с процессорами. Особенно
если ваши треды большую часть времени будут стоять в ожидании блокера.

Не совсем правильно. availableProcessors - это некая база, от которой надо отталкиваться для расчетов, введя поправочные коэффициенты на свою задачу CPU bound/ IO bound.
...
Рейтинг: 0 / 0
Runtime.getRuntime().availableProcessors()
    #39832313
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Runtime.getRuntime().availableProcessors()
    #39832326
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Докеры и виртуалки. Тоже требуют внимания.
...
Рейтинг: 0 / 0
Runtime.getRuntime().availableProcessors()
    #39832349
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ПанфиловОзверин 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
Runtime.getRuntime().availableProcessors()
    #39832775
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин...и В винде оно возвращает с учетом гипертрединга, а в линуксе - похожу, только физические ядра...
Х.з. На Ubundu у меня все возврашалось корректно

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

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

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


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