開源ERP軟件Odoo提速指南
Odoo 是***的 ERP(企業(yè)資源計劃)軟件,它由 Python 編寫,使用 PostgreSQL 作為后端數(shù)據(jù)庫。Odoo 社區(qū)版是免費的開源軟件,它囊括了項目管理,生產(chǎn)、財務、記賬和銷售管理,倉儲管理,人力資源管理,甚至還有更多項目。里面包含了 30 個核心模塊,以及超過 3000 個社區(qū)模塊。Odoo 部署了大量的模塊,數(shù)據(jù)庫里也包含了龐大的數(shù)據(jù)等等,這些都使得這個軟件比較復雜,可能會導致效率低下。Odoo 的兩個主要瓶頸在于磁盤訪問,以及數(shù)據(jù)庫查詢時間。
為了提升 Odoo 實例的性能,你可以:
- 使用一個快速磁盤驅(qū)動器來存儲(***是 SSD)。
- 使用內(nèi)存充足的 Linux VPS。
- 在 Odoo 中激活多處理器模式multiprocessing mode。
- 正確配置并優(yōu)化 PostgreSQL 服務。
獲得一臺有著更多內(nèi)存的 SSD VPS
正如我們先前提到的,隨機磁盤訪問速度是 Odoo 的主要瓶頸之一。因此,要確保 Odoo 部署在一臺基于 SSD 的 VPS 上。由于 Odoo 是一個對資源十分敏感的應用,因此始終要把它安裝在一臺有著更多 RAM 的 VPS 上,如果可能,將整個 Odoo 實例及其數(shù)據(jù)庫加載到 RAM 中。固態(tài)磁盤驅(qū)動器尤其以隨機存取見長,而且由于 SSD 沒有任何活動部件,它們能夠取得數(shù)百倍于傳統(tǒng)機械硬盤驅(qū)動器的隨機存取 IOPS(LCTT譯注:即每秒讀寫操作的次數(shù))。如果服務器沒有采用 SSD 來驅(qū)動或提速,那么不管你對 Odoo 做多少優(yōu)化和配置都無濟于事,它仍然會很慢。所以,獲得正確的主機來部署 Odoo 是提升其性能的最重要因素。
其它 Odoo 優(yōu)化包括:
在 Odoo 配置中啟用多處理器選項
要實現(xiàn)此功能,請定位到 openerp-server 二進制文件:
- #updatedb
- #locate openerp-server
- /usr/bin/openerp-server
執(zhí)行以下命令:
- #/usr/bin/openerp-server --help
該命令的輸出結(jié)果如下:
- Usage: openerp-server [options]
- Options:
- --version show program's version number and exit
- (...)
- Multiprocessing options:
- --workers=WORKERS Specify the number of workers, 0 disable prefork mode.
- --limit-memory-soft=LIMIT_MEMORY_SOFT
- Maximum allowed virtual memory per worker, when
- reached the worker be reset after the current request
- (default 671088640 aka 640MB).
- --limit-memory-hard=LIMIT_MEMORY_HARD
- Maximum allowed virtual memory per worker, when
- reached, any memory allocation will fail (default
- 805306368 aka 768MB).
- --limit-time-cpu=LIMIT_TIME_CPU
- Maximum allowed CPU time per request (default 60).
- --limit-time-real=LIMIT_TIME_REAL
- Maximum allowed Real time per request (default 120).
- --limit-request=LIMIT_REQUEST
- Maximum number of request to be processed per worker
- (default 8192).
工作進程的數(shù)量應該和分配到 VPS 的 CPU 核心數(shù)一樣,或者,如果你想為 PostgreSQL 數(shù)據(jù)庫、cron 任務、或者其它和 Odoo 實例安裝在同一臺 VPS 上的其它應用預留出一些 CPU 核心,那么你可以將工作進程數(shù)設(shè)置為一個比 VPS 上可用 CPU 核心更低的值,以避免資源耗盡。
limit-memory-soft 和 limit-memory-hard 參數(shù)不言自明,你可以使用默認值,也可以根據(jù) VPS 上的實際可用 RAM 來進行修改。
例如,如果你的 VPS 有 8 個 CPU 核心,以及 16 GB 內(nèi)存,那么你可以將工作進程數(shù)設(shè)置為 17(CPU 核心數(shù) x 2 + 1),limit-memory-soft 總值設(shè)置為 640 x 17 = 10880 MB,而 limit-memory-hard 總數(shù)設(shè)置為 68MB x 17 = 13056 MB,這樣,Odoo 就會有總計達 12.75 GB 的 RAM。
例如,在一臺擁有 16 GB RAM 和 8 個 CPU 核心的 VPS 上,編輯 Odoo 配置文件(如 /etc/odoo-server.conf),并添加以下行:
- vi /etc/odoo-server.conf
- workers = 17
- limit_memory_hard = 805306368
- limit_memory_soft = 671088640
- limit_request = 8192
- limit_time_cpu = 60
- limit_time_real = 120
- max_cron_threads = 2
別忘了重啟 Odoo 讓修改生效。
正確配置并優(yōu)化 PostgreSQL
對于 PostgreSQL 優(yōu)化,及時將它更新到***版本是一個不錯的主意。在 PostgreSQL 配置文件(pg_hba.conf)中,有兩個設(shè)置需要修改:shared_buffers 和 effective_cache_size。將 shared_buffers 設(shè)置為可用內(nèi)存的 20%,effective_cache_size 設(shè)置為可用內(nèi)存的 50%。
例如,如果 Odoo 安裝到了一臺 16 GB RAM 的 SSD VPS 上,那么在 pg_hba.conf 中使用如下設(shè)置:
- vi /var/lib/postgresql/data/pg_hba.conf
- shared_buffers = 3072MB
- effective_cache_size = 8192MB
重啟 PostgreSQL 服務來讓修改生效。
同時,也別忘了周期性手動執(zhí)行 ‘VACUUM’。此操作會將陳舊或臨時數(shù)據(jù)清理干凈,但請牢記,它會大量占用 CPU 和磁盤使用。