什么是"工人"在Odoo?

时间:2016-03-10 14:02:27

标签: multithreading odoo odoo-8 python-multithreading worker

工人的目的是什么?这些工作人员是多线程还是其他什么?当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

WorkerHTTPWorkerCron之间有什么区别?老实说,我不知道他们做了什么。

2 个答案:

答案 0 :(得分:11)

定义

Odoo文档here

中对此进行了解释
  

Odoo包含内置的HTTP服务器,使用多线程或   多处理。

     

对于生产用途,建议使用多处理   服务器因为它增加了稳定性,使用得更好   计算资源,可以更好地监控和   资源受限。

     

通过配置选项启用多处理:选项:a non-zero number of worker processes <odoo.py --workers>,工作人员应该   基于机器中的核心数量(可能有一些   cron工人的空间取决于预测的cron工作量)   可以根据硬件配置来配置工作线程限制   避免资源耗尽警告

     

注意:目前在Windows上无法使用多处理模式

配置

每个可用CPU应使用2个工作线程+ 1个cron线程,每10个concurent用户使用1个CPU。确保调整配置文件中的内存限制和CPU限制。

workers = --workers <count>

如果count不为0(默认值),则启用多处理并设置指定数量的HTTP worker(处理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不同之处在于,这是一个&#34;墙上时间&#34;限制包括例如SQL查询。

--max-cron-threads <count>

致力于cron工作的工人数量。默认为2.工作程序是多线程模式下的线程,是多处理模式下的进程。

对于多处理模式,这是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

注意:如果通知小于总内存,则最大内存是故意的。如        工作人员处理他们可以超出Mem Per限制的请求所以a        重载下的服务器可能超过这个数量。这就是为什么        是&#34;头部空间&#34;内置。

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

答案 1 :(得分:2)

您可能知道GIL阻止Python做任何真正的线程

为了更好地了解工人,让我们看看没有他们会发生什么:

在未启用任何工作程序的情况下,您的odoo实例仅在托管计算机中使用一个内核,因此,一旦客户端数量超过一个,客户端的性能就会下降,因为新客户端需要等待轮到使用odoo资源。 / p> 通常,生产服务器将具有多个内核,因此需要扩展机器资源上的odoo。简单地说,将工作程序等同于在同一台计算机上启动odoo的多个实例。