労働者の目的は何ですか?これらのワーカーはマルチスレッドまたは他の何かのためのものですか? 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
の違いは何ですか?正直なところ、私は彼らが何をしているのかわかりません。
Odooのドキュメントで説明されています ここ
Odooには、マルチスレッドまたはマルチプロセッシングのいずれかを使用する組み込みのHTTPサーバーが含まれています。
本番環境で使用する場合は、安定性が向上し、コンピューティングリソースをいくらか有効に活用し、監視とリソース制限を改善できるため、マルチプロセッシングサーバーを使用することをお勧めします。
マルチプロセッシングは、:option:
a non-zero number of worker processes <odoo.py --workers>
を構成することで有効になります。ワーカーの数は、マシンのコアの数に基づく必要があります(cronワーカーの予測量に応じて、cronワーカー用のスペースがある可能性があります)。リソースの枯渇を回避するためにハードウェア構成に基づいて構成されている警告注:マルチプロセッシングモードは現在Windowsでは使用できません
使用可能なCPUごとに2つのワーカースレッド+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です。ワーカーはマルチスレッドモードのスレッドであり、マルチプロセッシングモードのプロセスです。
マルチプロセッシングモードの場合、これはHTTPワーカープロセスに追加されます。
上記のコメントの@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の制限を超えて成長する可能性があるため、負荷の高いサーバーがこの量を超える可能性があります。これが「ヘッドルーム」が組み込まれている理由です。
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
ご存知かもしれませんが、 [〜#〜] gil [〜#〜] は、Pythonが実際のスレッドを実行できないようにします
労働者をよりよく理解するために、労働者なしで何が起こるか見てみましょう:
ワーカーが有効になっていない場合、odooインスタンスはホスティングマシンで1つのコアのみを使用します。したがって、クライアントの数が1を超えると、新しいクライアントがodooリソースを使用する順番を待つ必要があるため、パフォーマンスが低下します。
通常、本番サーバーには複数のコアがあるため、マシンリソースでodooをスケーリングする必要があります。簡単に言えば、ワーカーは、同じマシンでodooの複数のインスタンスを起動することとどういうわけか同じです。