Odoo 中的“工人”是啥?
Posted
技术标签:
【中文标题】Odoo 中的“工人”是啥?【英文标题】:What is a "worker" in Odoo?Odoo 中的“工人”是什么? 【发布时间】:2016-06-25 10:10:36 【问题描述】:工人的目的是什么?这些工人是用于多线程还是其他?当Odoo
实例启动时,我在命令行上看到至少 6 个工作人员通知:
2016-03-10 13:55:09,602 15504 INFO ? openerp.service.server: Worker WorkerHTTP (15504) alive
2016-03-10 13:55:09,606 15503 INFO ? openerp.service.server: Worker WorkerHTTP (15503) alive
2016-03-10 13:55:09,625 15507 INFO ? openerp.service.server: Worker WorkerCron (15507) alive
2016-03-10 13:55:09,628 15506 INFO ? openerp.service.server: Worker WorkerCron (15506) alive
2016-03-10 13:55:09,629 15508 INFO ? openerp.service.server: Worker WorkerCron (15508) alive
2016-03-10 13:55:09,629 15509 INFO ? openerp.service.server: Worker WorkerCron (15509) alive
WorkerHTTP
和 WorkerCron
有什么区别?老实说,我不知道他们在做什么。
【问题讨论】:
访问此链接 s://github.com/DocCyblade/tkl-odoo/blob/master/overlay/etc/odoo/openerp-server.conf#L395 @prakash 链接已失效。 【参考方案1】:定义
在Odoo文档here中有解释
Odoo 包括内置 HTTP 服务器,使用多线程或 多处理。
对于生产使用,建议使用多处理 服务器,因为它增加了稳定性,可以更好地利用 计算资源,可以更好地监控和 资源受限。
通过配置:option:
a non-zero number of worker processes <odoo.py --workers>
启用多处理,worker的数量应该 取决于机器中的核心数量(可能有一些 cron 工作人员的空间取决于预测的 cron 工作量) 工作人员限制可以根据硬件配置进行配置,以 避免资源耗尽警告注意:多处理模式目前在 Windows 上不可用
配置
您应该使用 2 个工作线程 + 每个可用 CPU 1 个 cron 线程,每 10 个并发用户使用 1 个 CPU。确保在配置文件中调整内存限制和 CPU 限制。
workers = --workers <count>
如果 count 不为 0(默认值),则启用多处理并设置指定数量的 HTTP 工作者(处理 HTTP 和 RPC 请求的子进程)。
许多选项允许限制和回收工人:
--limit-request <limit>
工作人员在被回收和重新启动之前将处理的请求数。默认为 8196。
--limit-memory-soft <limit>
每个工作人员允许的最大虚拟内存。如果超出限制,则在当前请求结束时将工作人员杀死并回收。默认为 640MB。
--limit-memory-hard <limit>
虚拟内存的硬限制,任何超过限制的工作人员将立即被杀死,而无需等待当前请求处理结束。默认为 768MB。
--limit-time-cpu <limit>
防止工作人员对每个请求使用超过 CPU 秒数。如果超过限制,工人将被杀死。默认为 60。
--limit-time-real <limit>
防止工作人员花费超过几秒钟的时间来处理请求。如果超过限制,工人将被杀死。默认为 120。
与--limit-time-cpu
的不同之处在于这是一个“挂墙时间”限制,包括例如SQL 查询。
--max-cron-threads <count>
致力于 cron 作业的工人数量。默认为 2。workers 是多线程模式下的线程和多处理模式下的进程。
对于多处理模式,这是对 HTTP 工作进程的补充。
More info about Deployment Architecture, with some diagram.
More information about the configuration file
实例
我在上面的评论中添加@prakah link 的信息:
Heading | Description
------------------ | ---------------------------------------------------------
CPUs | Number of CPU Cores not threads
Physical | Physical memory, not virtual or swap
workers | Number of workers specified in config file (workers = x)
cron | Number of workers for cron jobs (max_cron_threads = xx)
Mem Per | Memory in MB that is the max memory for request per worker
Max Mem | Maximum amount that can be used by all workers
limit_memory_soft | Number in bytes that you will use for this setting
注意:如果通知小于总内存,则为 Max Memory,这是故意的。作为 工作人员处理他们可以增长超出 Mem Per 限制的请求,因此 重负载下的服务器可能会超过这个数量。这就是为什么有 是内置的“头部空间”。
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
【讨论】:
对不起,我还是不明白为什么768MB
是805306368
。你能解释一下吗?
@salahaddin 1MB = 1024kB
, 1kB = 1024B
。所以768 x 1024 x 1024 = 805306368 B
【参考方案2】:
您可能知道GIL 阻止 Python 执行任何真正的线程处理
为了更好地了解工人,让我们看看没有他们会发生什么:
在没有启用工作器的情况下,您的 odoo 实例仅使用主机中的一个核心,因此一旦客户端数量超过一个,性能就会下降,因为新客户端需要等待轮到使用 odoo 资源。
通常生产服务器会有多个内核,因此需要在机器资源上扩展 odoo;简单地说,工人在某种程度上等于在同一台机器上启动多个 odoo 实例。
【讨论】:
以上是关于Odoo 中的“工人”是啥?的主要内容,如果未能解决你的问题,请参考以下文章