開源ERP軟件Odoo提速指南
Odoo 是***的 ERP(企業(yè)資源計(jì)劃)軟件,它由 Python 編寫,使用 PostgreSQL 作為后端數(shù)據(jù)庫(kù)。Odoo 社區(qū)版是免費(fèi)的開源軟件,它囊括了項(xiàng)目管理,生產(chǎn)、財(cái)務(wù)、記賬和銷售管理,倉(cāng)儲(chǔ)管理,人力資源管理,甚至還有更多項(xiàng)目。里面包含了 30 個(gè)核心模塊,以及超過 3000 個(gè)社區(qū)模塊。Odoo 部署了大量的模塊,數(shù)據(jù)庫(kù)里也包含了龐大的數(shù)據(jù)等等,這些都使得這個(gè)軟件比較復(fù)雜,可能會(huì)導(dǎo)致效率低下。Odoo 的兩個(gè)主要瓶頸在于磁盤訪問,以及數(shù)據(jù)庫(kù)查詢時(shí)間。
為了提升 Odoo 實(shí)例的性能,你可以:
- 使用一個(gè)快速磁盤驅(qū)動(dòng)器來存儲(chǔ)(***是 SSD)。
- 使用內(nèi)存充足的 Linux VPS。
- 在 Odoo 中激活多處理器模式multiprocessing mode。
- 正確配置并優(yōu)化 PostgreSQL 服務(wù)。
獲得一臺(tái)有著更多內(nèi)存的 SSD VPS
正如我們先前提到的,隨機(jī)磁盤訪問速度是 Odoo 的主要瓶頸之一。因此,要確保 Odoo 部署在一臺(tái)基于 SSD 的 VPS 上。由于 Odoo 是一個(gè)對(duì)資源十分敏感的應(yīng)用,因此始終要把它安裝在一臺(tái)有著更多 RAM 的 VPS 上,如果可能,將整個(gè) Odoo 實(shí)例及其數(shù)據(jù)庫(kù)加載到 RAM 中。固態(tài)磁盤驅(qū)動(dòng)器尤其以隨機(jī)存取見長(zhǎng),而且由于 SSD 沒有任何活動(dòng)部件,它們能夠取得數(shù)百倍于傳統(tǒng)機(jī)械硬盤驅(qū)動(dòng)器的隨機(jī)存取 IOPS(LCTT譯注:即每秒讀寫操作的次數(shù))。如果服務(wù)器沒有采用 SSD 來驅(qū)動(dòng)或提速,那么不管你對(duì) Odoo 做多少優(yōu)化和配置都無濟(jì)于事,它仍然會(huì)很慢。所以,獲得正確的主機(jī)來部署 Odoo 是提升其性能的最重要因素。
其它 Odoo 優(yōu)化包括:
在 Odoo 配置中啟用多處理器選項(xiàng)
要實(shí)現(xiàn)此功能,請(qǐng)定位到 openerp-server 二進(jìn)制文件:
- #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).
工作進(jìn)程的數(shù)量應(yīng)該和分配到 VPS 的 CPU 核心數(shù)一樣,或者,如果你想為 PostgreSQL 數(shù)據(jù)庫(kù)、cron 任務(wù)、或者其它和 Odoo 實(shí)例安裝在同一臺(tái) VPS 上的其它應(yīng)用預(yù)留出一些 CPU 核心,那么你可以將工作進(jìn)程數(shù)設(shè)置為一個(gè)比 VPS 上可用 CPU 核心更低的值,以避免資源耗盡。
limit-memory-soft 和 limit-memory-hard 參數(shù)不言自明,你可以使用默認(rèn)值,也可以根據(jù) VPS 上的實(shí)際可用 RAM 來進(jìn)行修改。
例如,如果你的 VPS 有 8 個(gè) CPU 核心,以及 16 GB 內(nèi)存,那么你可以將工作進(jìn)程數(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 就會(huì)有總計(jì)達(dá) 12.75 GB 的 RAM。
例如,在一臺(tái)擁有 16 GB RAM 和 8 個(gè) 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
對(duì)于 PostgreSQL 優(yōu)化,及時(shí)將它更新到***版本是一個(gè)不錯(cuò)的主意。在 PostgreSQL 配置文件(pg_hba.conf)中,有兩個(gè)設(shè)置需要修改:shared_buffers 和 effective_cache_size。將 shared_buffers 設(shè)置為可用內(nèi)存的 20%,effective_cache_size 設(shè)置為可用內(nèi)存的 50%。
例如,如果 Odoo 安裝到了一臺(tái) 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 服務(wù)來讓修改生效。
同時(shí),也別忘了周期性手動(dòng)執(zhí)行 ‘VACUUM’。此操作會(huì)將陳舊或臨時(shí)數(shù)據(jù)清理干凈,但請(qǐng)牢記,它會(huì)大量占用 CPU 和磁盤使用。