Назад | Перейти на главную страницу

Как узнать максимальное количество потоков, которое может запустить мой сервер?

Вот спецификации машины:

CPU(s):                20
Thread(s) per core:    1
Core(s) per socket:    10
Socket(s):             2

Исходя из того, что я читал до сих пор, эти числа означают, что я могу выполнять 20 параллельных заданий, потому что у меня 20 процессоров.

Однако сколько потоков я могу запустить в каждом из этих процессоров?

Добро пожаловать в ServerFault!

У вас есть два сокета ЦП, то есть два физических процессора. Каждый процессор имеет 10 ядер, каждое из которых по сути эквивалентно классическому одноядерному процессору. Каждое ядро ​​может одновременно запускать только 1 поток, т.е. гиперпоточность отключена.

Таким образом, вы можете иметь до 20 параллельных потоков, по одному на процессор / ядро. Это может означать 20 однопоточных заданий, 1 многопоточное задание с 20 потоками или что-то среднее.

Но это только для потоков, которые, как ожидается, будут на 100% загружены на работе все время, почти каждую миллисекунду своей жизни. Если ваши потоки собираются провести какое-то значительное время в ожидании чего-то еще, система автоматически сможет запускать другие потоки, пока ваш поток (-ы) ждут.

Если вы не находитесь в среде, которая сильно оптимизирована для обработки чисел, вы не получите все эти 20 потоков для себя в 100% случаев: фоновые процессы (демоны) ОС будут занимать некоторые из них. в течение некоторого (небольшого) промежутка времени. Бегать ps -ef (или эквивалент) в любой современной unix-подобной системе, когда она простаивает: вы увидите более 20 процессов, каждый из которых содержит хотя бы один поток, и это только для самой ОС.

Предположение, что вы получите максимальную отдачу от системы, выделив ровно столько потоков, сколько доступно аппаратному обеспечению, может быть чрезмерным упрощением проблемы оптимизации. В зависимости от того, что именно вы делаете, вы можете использовать больше или меньше потоков. Например, если вы планируете тяжелые вычислительные задания, которые по своей природе связаны с ЦП, вы можете получить лучшие результаты, выделив для задания чуть меньше 20 потоков, так что одно или два ядра ЦП останутся доступными для фоновых задач ОС. , поэтому ваши рабочие потоки будут реже прерываться.

Но если вы настраиваете среду сервера J2EE, JVM обычно будет иметь большое количество потоков, и большинство из них будет проводить большую часть своей жизни в ожидании ввода, поэтому общее количество потоков, используемых JVM сервера J2EE на Система с 20 процессорами может легко оказаться выше 20.