Как настроить и настроить Akka Dispatchers
Я просматриваю документацию здесь: http://doc.akka.io/docs/akka/2.3.3/java/dispatchers.html
Мы используем Akka таким образом, что у нас есть два отдельных диспетчера (исполнители fork-join по умолчанию) для разных участников. Сейчас мы сталкиваемся с некоторыми проблемами с производительностью и изучаем, как мы можем настроить параметры конфигурации диспетчера и посмотреть, как они влияют на производительность приложения.
Я просмотрел документацию, но не совсем понял параметры конфигурации. Например, просто для простого по умолчанию диспетчера fork-join-executor:
Что это такое и как мы должны настроить их, чтобы увидеть, как они влияют на производительность приложений?
# Min number of threads to cap factor-based parallelism number to
parallelism-min = 2
# Parallelism (threads) ... ceil(available processors * factor)
parallelism-factor = 2.0
# Max number of threads to cap factor-based parallelism number to
parallelism-max = 10
Спасибо!
1 ответ
Конечно, эта конфигурация зависит от вашего оборудования.
Допустим, у вас есть 2 доступных процессора на вашем компьютере, и вы можете настроить количество потоков, которое будет иметь данный диспетчер, с помощью коэффициента параллелизма.
current number of thread = available processor * parallelism-factor
Затем вы можете установить границы, чтобы контролировать результат этого умножения и избегать экстремальных значений.
parallelism-min < current number of thread < parallelism-max
Теперь, если вы хотите выбрать правильные параллелизм-фактор + границы, вы должны спросить себя, за каких действующих лиц в данный момент будет отвечать ваш диспетчер.
Кажется логичным предположить, что чем больше участников, тем больше потоков, но я настоятельно рекомендую вам следить за вашей системой, чтобы найти основную причину проблем с производительностью, а не просто случайно настроить конфигурацию.
В качестве примечания вы должны проверить параметр "throughput" вашего диспетчера, поскольку он позволяет вам настроить справедливость распределения потоков субъекта. Это действительно может иметь большое значение в случае процесса, подобного дозированию.
# Throughput defines the maximum number of messages to be
# processed per actor before the thread jumps to the next actor.
# Set to 1 for as fair as possible.
throughput = 100