Я запускаю задачу через Docker в AWS ECS. Задача выполняет некоторые вычисления с привязкой к процессору, которые я хотел бы выполнить параллельно. Я запускаю пул потоков с числом потоков, указанным в Runtime.getRuntime().availableProcessors()
, которое отлично работает локально на моем ПК. По какой-то причине в AWS ECS это всегда возвращает 1, даже если доступно несколько ядер. Поэтому мои вычисления выполняются последовательно и не используют несколько ядер.
Например, сейчас у меня есть задача, работающая на экземпляре "t3.medium", который должен иметь 2 ядра в соответствии с документами .
Когда я выполняю следующий код:
System.out.println("Java reports " +
Runtime.getRuntime().availableProcessors() + " cores");
Тогда в журнале отображается следующее:
Java reports 1 cores
Я не указываю параметр cpu
в определении задачи ECS. Я вижу, что в списке задач в консоли управления ECS есть столбец для «CPU», который для моей задачи читает 0. Я также заметил, что в списке экземпляров (= виртуальных машин) он указывает «доступный процессор» как 2048, что, вероятно, связано с тем фактом, что виртуальная машина имеет 2 ядра.
Я бы хотел, чтобы моя программа на Java видела все ядра, которые может предложить виртуальная машина. (Как обычно бывает, когда Java-программа выполняется на компьютере без Docker).
Как мне это сделать?