工人的目的是什么?这些工作人员是多线程还是其他什么?当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
之间有什么区别?老实说,我不知道他们做了什么。
答案 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的多个实例。