Конфигурация каденции для рабочих потоков и рабочего процесса

Каким будет соотношение между рабочим и рабочим процессом и как управлять потоками, чтобы не было сбоев между рабочими и количеством рабочих процессов. Если я запускаю большее количество рабочих процессов, возникает следующая ошибка

Недостаточно потоков для выполнения рабочих процессов. Если это сообщение появляется постоянно, либо WorkerOptions.maxConcurrentWorklfowExecutionSize следует уменьшить, либо WorkerOptions.maxWorkflowThreads следует увеличить.

рабочий процесс в состоянии блокировки остается активным в памяти ?? Рабочий процесс в состоянии ожидания непрерывно проверяет наличие условия «Чем больше количество рабочих процессов в состоянии ожидания будет занимать работника») В приведенном ниже примере поток ожидает сигнала, количество рабочих процессов масштабируется до миллиона в день, а timetocloseWorkflow = 2 дня. Среднее время срабатывания сигнала составляет 1 день после запуска соответствующего рабочего процесса.

public class TestWorkflowImpl implements TestWorkflow {

 private static final Logger logger = LoggerFactory.getLogger(TestWorkflow.class);
 private int counter = 0;

 private final CounterPrintActivity cpa = Workflow.newActivityStub(CounterPrintActivity.class);

 @Override
 @WorkflowMethod
 public String startWorkflow() {
 Workflow.await(() ->counter >= 1000);
 return "Complete";
 }

 @Override
 public int getCurrentStatus() {
 return counter;
 }

 @Override
 public void setCount(int setNum) {
 logger.info("In signal");
 counter = counter+setNum;
 }

--


person Aditya_G    schedule 17.09.2020    source источник


Ответы (1)


Каким будет соотношение между рабочим и рабочим процессом и как управлять потоками, чтобы не было сбоев между рабочими и количеством рабочих процессов. Если я запускаю большее количество рабочих процессов, возникает следующая ошибка

Такого соотношения нет, поскольку заблокированные рабочие процессы вообще не потребляют рабочую память (после того, как они выталкиваются из кеша). Таким образом, можно иметь миллиарды заблокированных рабочих процессов и одного работника, если эти рабочие процессы не будут развиваться.

Недостаточно потоков для выполнения рабочих процессов. Если это сообщение появляется постоянно, либо WorkerOptions.maxConcurrentWorklfowExecutionSize следует уменьшить, либо WorkerOptions.maxWorkflowThreads следует увеличить.

maxWorkflowThreads определяет, сколько потоков могут использовать все выполняющиеся в данный момент и кэшированные рабочие процессы.

maxConcurrentWorklfowExecutionSize определяет, сколько задач рабочего процесса может выполняться параллельно.

Исключение Недостаточно потоков для выполнения рабочих процессов указывает на то, что недостаточно потоков для выполнения текущих задач рабочего процесса. Например, если каждый рабочий процесс использует два потока и maxConcurrentWorklfowExecutionSize равно 100, тогда maxWorkflowThreads должно быть не менее 200. При такой настройке 0 рабочих процессов будет кэшироваться, так как все потоки будут использоваться текущими задачами рабочего процесса. Так что в целом лучше держать maxWorkflowThreads намного выше, чем maxConcurrentWorklfowExecutionSize для поддержки кэширования.

рабочий процесс в состоянии блокировки остается активным в памяти ??

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

Рабочий процесс в состоянии ожидания постоянно проверяет условие ?? Больше количество рабочих процессов в состоянии ожидания будет занимать рабочего ??

Он проверяет только при обработке какого-либо нового события. Когда ничего не происходит, проверка не выполняется.

В приведенном ниже примере поток ожидает сигнала, количество рабочих процессов масштабируется до миллиона в день, а timetocloseWorkflow = 2 дня. Среднее время срабатывания сигнала составляет 1 день после запуска соответствующего рабочего процесса.

Этот сценарий должен работать нормально при условии, что работники могут не отставать от скорости обработки задач рабочего процесса.

person Maxim Fateev    schedule 18.09.2020
comment
Является ли setMaxConcurrentActivityExecutionSize глобальным «дросселем» для рабочего процесса? - person Andrés Soto; 04.11.2020
comment
Это на одного рабочего. Невозможно ограничить одновременное выполнение действий глобально. - person Maxim Fateev; 04.11.2020