Есть какой-то сервер к примеру с 16 CPU.
Есть JVM (OpenJDK 8u), запускаемая на нем.
Требуется ограничить JVM работой на 4 CPU.
Docker-ы не предлагать, этот доп. ПО, которое необходимо ставить на хост.
Напрашивается механизм с использованием taskset, и в данном случае можно посадить уже имеющиеся треды на какие-то CPU в кол-ве 4 шт.
Но вновь создаваемые треды, планировщик ОС будет распределять по всем доступным CPU и то, что мы ранее ограничили с помощью taskset, для новых тредов не будет актуально. Выполнив Runtime.availableProcessors() мы увидим не 4 CPU, а 16.
Просьба подсказать, кто уже решал подобные задачи по ограничению.
@eri был прав.Спасибо.
Дополню для поколений.
Нужно не уже запущенному jvm процессу выставлять cpu affinity с помощью taskset, а запускать jvm используя taskset.
Пример:
/usr/bin/taskset -c 5,6,7 java -jar .......
Запустит JVM только на ядрах 5,6,7
Проверить можно через:
taskset -cp PID_JVM
А лучше увидеть в динамике последний используемый CPU тредом можно так:
top -H -p PID_JVM
покажет все треды
и далее
Shift + F и выбрать "Last Used CPU(SMP)"
Покажет столбец и на каком CPU работал трэд.
Ну и в JVM, к примеру в debug-е, тоже покажет верное кол-во видимых CPU:
Runtime.getRuntime().availableProcessors()
3
Проверял в том числе на JBOSS.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У меня есть массив класса VKUserПользователь моей программы должен вводить данные о пользователях, после чего они отправляются в класс через...
Есть сайт с PWA, нужно опубликовать его в Google PlayСделал все по статье: https://habr
Честно гуглилНашел это: OutputStreamWriter vs FileWriter