Buenos días, abro este hilo para realizaros una consulta acerca del método de despliegue de Odoo, concretamente sobre los umbrales de memoria que se deberían especificar para los parámetros limit_memory_hard y limit_memory_soft.
De acuerdo con la documentación oficial de Odoo disponible en https: //www .odoo.com/documentation/16.0/administration/install/deploy.html#memory-size-calculation lo que Odoo plantea es emplear esta fórmula:
memory size calculation
We consider 20% of the requests are heavy requests, while 80% are simpler ones
A heavy worker, when all computed field are well designed, SQL requests are well designed, … is estimated to consume around 1GB of RAM
A lighter worker, in the same scenario, is estimated to consume around 150MB of RAM
Needed RAM = #worker * ( (light_worker_ratio * light_worker_ram_estimation) + (heavy_worker_ratio * heavy_worker_ram_estimation) )
Y de hecho plantea este ejemplo de despliegue:
=============================================
Configuration sample
Server with 4 CPU, 8 Thread
60 concurrent users
60 users / 6 = 10 <- theoretical number of worker needed
(4 * 2) + 1 = 9 <- theoretical maximal number of worker
We’ll use 8 workers + 1 for cron. We’ll also use a monitoring system to measure cpu load, and check if it’s between 7 and 7.5 .
RAM = 9 * ((0.8*150) + (0.2*1024)) ~= 3Go RAM for Odoo
in /etc/odoo.conf:
[options]
limit_memory_hard = 1677721600
limit_memory_soft = 629145600
Básicamente lo que nos dice Odoo en su documentación es "te ayudamos a saber cuánta memoria necesita Odoo para funcionar". Pero si atendemos al ejemplo anterior, resultaría que necesitaríamos 3GB de RAM y el valor propuesto para limit_memory_hard es casi la mitad (1,6GB).
=============================================
Por otra parte, si vemos la ayuda de línea de comandos de odoo-bin (documentación disponible en https: // www.odoo.com/documentation/16.0/developer/reference/cli.html#multiprocessing ) tenemos lo siguiente:
=============================================
--limit-memory-hard<limit>
Hard limit on virtual memory, any worker exceeding the limit will be immediately killed without waiting for the end of the current request processing.
Defaults to 2560MiB.
=============================================
De acuerdo con esta documentación, tendríamos que el valor que se defina en este parámetro es por worker.
Concretando mi duda: atendiendo al ejemplo que vemos un poco más arriba, en donde tenemos 9 workers y un valor de 1,6GB en limit_memory_hard, resultaría que potencialmente, en un entorno de uso muy demandante, podríamos llegar a necesitar 9 workers x 1,6GB = 14,4GB RAM. ¿Es esto correcto?
Es decir: la cantidad (en bytes) que debemos poner en limit_memory_hard se refiere a la suma de memoria de TODOS los workers que tengamos configurados, o debe referirse a 1 solo worker?
No sé si he explicado correctamente la duda. ¿Algún técnico de sistemas me podría dar una guía?
Muchas gracias
Ignacio.