Настройки за мултипроцесорна работа на Odoo 8
Обикновенно ERP Odoo се инсталира на VPS или на физически сървър. Винаги логическите процесори са повече от един, най често 4, 8, 16. Ако Odoo не е настроен да работи в мултипроцесорен режим, вие не ползвате ефективно сървъра, в часност процесора му. Това е особенно важно в реални ситуации, когато в системата работят паралелно (едновременно) над 5 потребителя. Без значение е общия брой потребители.
По подразбиране мултипроцесорната поддръжка не е включена в стандартния конфигурационен файл (напр. /etc/odoo-server.conf). Съществуват няколко параметъра, които трябва да се зададът и настроят спрямо броя на логическите ядра и наличната RAM. На първо място това е workers
. Правилото е workers=(cpu cores X 2)+1
или при 4 ядра се задава workers=9
. Друг важен параметър е max_cron_threads
. Той има стойност от 1 до 3 според броя на ядрата и наличната RAM. Други два параметъра са limit_soft_memory
и limit_memory_hard
, като limit_memory_hard
е с 30% по-голям от limit_soft_memory
. Тези параметри зависят от наличната RAM и при 4 ядра (8 логически), limit_memory_hard = 1572864000
, limit_memory_soft = 107374182
, workers=9
и max_cron_threads=3
, Odoo спокойно се справя с над 20 паралелно работещи потребителя.
По някаква причина, не сме изследвали проблема, ако е включен мултипроцесорния режим и longpolling на порт 8072 и xmlrpc порта не е 8069, в лога непрекъснато се появява грешката Exception: bus.Bus unavailable.
Дискусии и експерименти на тази тема можете да видите на https://github.com/DocCyblade/tkl-odoo/issues/49
В таблицата по-долу можете да видите някои готови стойности при различни комбинации на ядра и RAM:
CPUs | Physical | workers | cron | Mem Per | Max Mem | limit_memory_soft |
---|---|---|---|---|---|---|
ANY | =< 256MB | NR | NR | NR | NR | NR |
1 | 512MB | 0 | N/A | N/A | N/A | N/A |
1 | 512MB | 1 | 1 | 177MB | 354MB | 185127901 |
1 | 1GB | 2 | 1 | 244MB | 732MB | 255652815 |
1 | 2GB | 2 | 1 | 506MB | 1518MB | 530242876 |
2 | 1GB | 3 | 1 | 183MB | 732MB | 191739611 |
2 | 2GB | 5 | 2 | 217MB | 1519MB | 227246947 |
2 | 4GB | 5 | 2 | 450MB | 3150MB | 471974428 |
4 | 2GB | 5 | 2 | 217MB | 1519MB | 227246947 |
4 | 4GB | 9 | 2 | 286MB | 3146MB | 300347363 |
4 | 8GB | 9 | 3 | 546MB | 6552MB | 572662306 |
4 | 16GB | 9 | 3 | 1187MB | 14244MB | 1244918057 |
6 | 12GB | 10 | 4 | 763MB | 10682MB | 800304465 |
6 | 16GB | 13 | 4 | 838MB | 14246MB | 878765687 |
6 | 32GB | 13 | 4 | 1676MB | 28492MB | 81757531374 |
8 | 32GB | 17 | 5 | 1295MB | 28490MB | 1358092426 |
8 | 64GB | 17 | 5 | 2590MB | 56980MB | 2716184851 |
Calculations on how we got the above chart
M = Total memory in bytes (1048576 = 1MB)
W = Workers (workers
)
CW = Cron workers (max_cron_threads
)
TW = W + CW
For ram 512 to 999MB
((TW * 0.45 ) + TW) / M = limit_soft_memory
1GB - 1.99GB
(TW * 0.40 ) + (TW - 1) / M = limit_soft_memory
2GB - 3.99GB
(TW * 0.35 ) + (TW - 1) / M = limit_soft_memory
4GB - 7.99GB
(TW * 0.30 ) + (TW - 2) / M = limit_soft_memory
8GB + 11.99GB
(TW * 0.25 ) + (TW - 3) / M = limit_soft_memory
12GB +
(TW * 0.15 ) + (TW - 3) / M = limit_soft_memory
Типично натоварване на реална инсталация при един потребител и синхронизация на преводи: