|
Runtime.getRuntime().availableProcessors()
|
|||
---|---|---|---|
#18+
Всем привет! Две машины с одинаковым 2-х ядерным процессором. На одной стоит Win10, на другой - Linux (CentOS7) Runtime.getRuntime().availableProcessors(): - на Win10 выводит 4 - на Linux (CentOS7) 2 Винда, как я понимаю выводит количество потоков (обычно это ядра*2), а линукс фактическое количество ядер. Или я ошибаюсь? Есть универсальный способ определения кол-ва процессоров? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2019, 12:33 |
|
Runtime.getRuntime().availableProcessors()
|
|||
---|---|---|---|
#18+
Molasar, а вы прямо в код првалитесь, там, насколько я помню, будет комментарий о том, как различаются понятие "процессоров" у винды и линукса. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2019, 12:42 |
|
Runtime.getRuntime().availableProcessors()
|
|||
---|---|---|---|
#18+
Т.е. как настроили JVM на конкретной машине, то и показывает? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
ОзверинMolasar, а вы прямо в код првалитесь, там, насколько я помню, будет комментарий о том, как различаются понятие "процессоров" у винды и линукса. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2019, 12:51 |
|
Runtime.getRuntime().availableProcessors()
|
|||
---|---|---|---|
#18+
Molasar, ну там суть такая, что ява использует средства ос для определения кол-ва процессоров. и В винде оно возвращает с учетом гипертрединга, а в линуксе - похожу, только физические ядра https://linux.die.net/man/3/sysconf - _SC_NPROCESSORS_ONLN ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2019, 12:54 |
|
Runtime.getRuntime().availableProcessors()
|
|||
---|---|---|---|
#18+
Molasar, универсального способа нет. Каждая операционка вкладывает свой смысл в термины процессор, ядро и thread. Вы для себя сами решаете что правильно. Исходя из вашей задачи. Задачу я надеюсь вы понимаете. Более того. Intel и AMD на коробке изделия могут слегка нас обманывать и выдавать одни цифры за другие. По вашему вопросу. Самое простое - посмотреть в переменные окружения. Например у меня под десятой виндой. Код: java 1. 2. 3. 4. 5.
Вообще такой параметру лучше задавать вручную (! если это важно) т.к. современные среды виртуализации могут быть очень хитрыми. Тактовая частота может плавать. И собственно сведения которые вы соберете из getRuntime() или из еще каких-то источников не сильно могут отражать действительность. Если вы решили выбрать размер пула потоков исходя из availableProcessors - то это скорее всего будет неправильный выбор. Для большинства задач количество тредов слабо связано с процессорами. Особенно если ваши треды большую часть времени будут стоять в ожидании блокера. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2019, 14:22 |
|
Runtime.getRuntime().availableProcessors()
|
|||
---|---|---|---|
#18+
mayton Если вы решили выбрать размер пула потоков исходя из availableProcessors - то это скорее всего будет неправильный выбор. Для большинства задач количество тредов слабо связано с процессорами. Особенно если ваши треды большую часть времени будут стоять в ожидании блокера. Не совсем правильно. availableProcessors - это некая база, от которой надо отталкиваться для расчетов, введя поправочные коэффициенты на свою задачу CPU bound/ IO bound. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2019, 14:25 |
|
Runtime.getRuntime().availableProcessors()
|
|||
---|---|---|---|
#18+
Озверин 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2019, 14:46 |
|
Runtime.getRuntime().availableProcessors()
|
|||
---|---|---|---|
#18+
Да. Докеры и виртуалки. Тоже требуют внимания. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2019, 14:53 |
|
Runtime.getRuntime().availableProcessors()
|
|||
---|---|---|---|
#18+
Андрей ПанфиловОзверин 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 если до сих пор выдает - значит актуальна? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2019, 15:16 |
|
Runtime.getRuntime().availableProcessors()
|
|||
---|---|---|---|
#18+
Озверин...и В винде оно возвращает с учетом гипертрединга, а в линуксе - похожу, только физические ядра... Х.з. На Ubundu у меня все возврашалось корректно И в такие "выкрутасы" не сильно верится. Что выводит команда top? Сколько ядер/процессоров Возможно у автора гипер трейдинг банально выключен и процессоров (ядер) только 2-е штуки. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2019, 14:27 |
|
Runtime.getRuntime().availableProcessors()
|
|||
---|---|---|---|
#18+
Количество ядер мне необходимо для расчета количества соединений с БД через пул хикари. Каждое соединение в отдельном потоке. У Оракла читал, что оптимальный вариант 2 * Ядра + 1. На практике это подтверждается. В настройках по умолчанию хочу выставлять количество потоков, рассчитанное по этой формуле. Можно и в ручную задать этот параметр. maytonMolasar, универсального способа нет. Каждая операционка вкладывает свой смысл в термины процессор, ядро и thread. Вы для себя сами решаете что правильно. Исходя из вашей задачи. Задачу я надеюсь вы понимаете. Более того. Intel и AMD на коробке изделия могут слегка нас обманывать и выдавать одни цифры за другие. По вашему вопросу. Самое простое - посмотреть в переменные окружения. Например у меня под десятой виндой. Код: java 1. 2. 3. 4. 5.
Вообще такой параметру лучше задавать вручную (! если это важно) т.к. современные среды виртуализации могут быть очень хитрыми. Тактовая частота может плавать. И собственно сведения которые вы соберете из getRuntime() или из еще каких-то источников не сильно могут отражать действительность. Если вы решили выбрать размер пула потоков исходя из availableProcessors - то это скорее всего будет неправильный выбор. Для большинства задач количество тредов слабо связано с процессорами. Особенно если ваши треды большую часть времени будут стоять в ожидании блокера. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2019, 18:19 |
|
Runtime.getRuntime().availableProcessors()
|
|||
---|---|---|---|
#18+
Premature optimization is the root of all evil. У тебя почти гарантированно в коде найдется масса мест, где что-то делается на столько не оптимально, что кол-во коннектов в пуле будет по сравнению с этим мелочью. Какой смысл сейчас на этапе разработки проекта тратить время на возню с высчитыванием оптимального размера пула, оптимального кол-ва работников и т.д.? Если будет доказано, что именно эти места являются узким местом - тогда и прикинешь оптимальную конфигурацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2019, 18:30 |
|
Runtime.getRuntime().availableProcessors()
|
|||
---|---|---|---|
#18+
Пусть автор сначала приведет скриншоты системных утилит Unix (хотя бы top), где было бы видно РЕАЛЬНОЕ кол-во процессоров в системе, а не его хотелки, что должно быть как-бы 4. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2019, 18:50 |
|
Runtime.getRuntime().availableProcessors()
|
|||
---|---|---|---|
#18+
lscpu И не скриншоты - текст из консоли замечательно копируется в два клика мыши. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2019, 19:04 |
|
|
start [/forum/topic.php?fid=59&msg=39832982&tid=2121221]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
149ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 247ms |
total: | 496ms |
0 / 0 |