odoo 是最流行的 erp(企業資源計劃)軟體,它由 python 編寫,使用 postgresql 作為後端資料庫。odoo 社群版是免費的開源軟體,它囊括了項目管理,生産、财務、記賬和銷售管理,倉儲管理,人力資源管理,甚至還有更多項目。裡面包含了 30 個核心子產品,以及超過 3000 個社群子產品。odoo 部署了大量的子產品,資料庫裡也包含了龐大的資料等等,這些都使得這個軟體比較複雜,可能會導緻效率低下。odoo 的兩個主要瓶頸在于磁盤通路,以及資料庫查詢時間。
為了提升 odoo 執行個體的性能,你可以:
使用一個快速磁盤驅動器來存儲(最好是 ssd)。
在 odoo 中激活多處理器模式multiprocessing mode。
正确配置并優化 postgresql 服務。
<a target="_blank"></a>
其它 odoo 優化包括:
要實作此功能,請定位到 openerp-server 二進制檔案:
<code>#updatedb</code>
<code>#locate openerp-server</code>
<code></code>
<code>/usr/bin/openerp-server</code>
執行以下指令:
<code>#/usr/bin/openerp-server --help</code>
該指令的輸出結果如下:
<code>usage: openerp-server [options]</code>
<code>options:</code>
<code>--version show program's version number and exit</code>
<code>(...)</code>
<code>multiprocessing options:</code>
<code>--workers=workers specify the number of workers, 0 disable prefork mode.</code>
<code>--limit-memory-soft=limit_memory_soft</code>
<code>maximum allowed virtual memory per worker, when</code>
<code>reached the worker be reset after the current request</code>
<code>(default 671088640 aka 640mb).</code>
<code>--limit-memory-hard=limit_memory_hard</code>
<code>reached, any memory allocation will fail (default</code>
<code>805306368 aka 768mb).</code>
<code>--limit-time-cpu=limit_time_cpu</code>
<code>maximum allowed cpu time per request (default 60).</code>
<code>--limit-time-real=limit_time_real</code>
<code>maximum allowed real time per request (default 120).</code>
<code>--limit-request=limit_request</code>
<code>maximum number of request to be processed per worker</code>
<code>(default 8192).</code>
工作程序的數量應該和配置設定到 vps 的 cpu 核心數一樣,或者,如果你想為 postgresql 資料庫、cron 任務、或者其它和 odoo 執行個體安裝在同一台 vps 上的其它應用預留出一些 cpu 核心,那麼你可以将工作程序數設定為一個比 vps 上可用 cpu 核心更低的值,以避免資源耗盡。
<code>limit-memory-soft</code> 和 <code>limit-memory-hard</code> 參數不言自明,你可以使用預設值,也可以根據 vps 上的實際可用 ram 來進行修改。
例如,如果你的 vps 有 8 個 cpu 核心,以及 16 gb 記憶體,那麼你可以将工作程序數設定為 17(cpu 核心數 x 2 + 1),<code>limit-memory-soft</code> 總值設定為 640 x 17 = 10880 mb,而 <code>limit-memory-hard</code> 總數設定為 68mb x 17 = 13056 mb,這樣,odoo 就會有總計達 12.75 gb 的 ram。
例如,在一台擁有 16 gb ram 和 8 個 cpu 核心的 vps 上,編輯 odoo 配置檔案(如 <code>/etc/odoo-server.conf</code>),并添加以下行:
<code>vi /etc/odoo-server.conf</code>
<code>workers = 17</code>
<code>limit_memory_hard = 805306368</code>
<code>limit_memory_soft = 671088640</code>
<code>limit_request = 8192</code>
<code>limit_time_cpu = 60</code>
<code>limit_time_real = 120</code>
<code>max_cron_threads = 2</code>
别忘了重新開機 odoo 讓修改生效。
對于 postgresql 優化,及時将它更新到最新版本是一個不錯的主意。在 postgresql 配置檔案(<code>pg_hba.conf</code>)中,有兩個設定需要修改:<code>shared_buffers</code> 和 <code>effective_cache_size</code>。将<code>shared_buffers</code> 設定為可用記憶體的 20%,<code>effective_cache_size</code> 設定為可用記憶體的 50%。
例如,如果 odoo 安裝到了一台 16 gb ram 的 ssd vps 上,那麼在 <code>pg_hba.conf</code> 中使用如下設定:
<code>vi /var/lib/postgresql/data/pg_hba.conf</code>
<code>shared_buffers = 3072mb</code>
<code>effective_cache_size = 8192mb</code>
重新開機 postgresql 服務來讓修改生效。
原文釋出時間為:2017-03-14
本文來自雲栖社群合作夥伴“linux中國”