Odoo is one of the few applications whose vendor publishes a sizing formula instead of a vague minimum. The deployment guide for Odoo 18, checked on 1 November 2026, tells you how many workers to run per CPU, how many users a worker serves and how much memory a worker needs. This guide applies those rules to three company sizes and prices each on MassiveGRID PaaS, built on Virtuozzo Application Platform (formerly Jelastic), where the Odoo Community package runs as a one-click environment billed by the cloudlet-hour.
Odoo's own formula
Odoo in production runs in multiprocessing mode with a pool of worker processes. The deployment guide's rule of thumb for the pool is (number of CPUs × 2) + 1, with the note that cron workers also need CPU, and that each worker serves roughly six concurrent users. Concurrent means people clicking at the same moment, not accounts, which is why a 150-person company often needs fewer workers than it fears.
Memory follows from the workers. The guide assumes 20% of requests are heavy and 80% are light, estimates about 1 GB for a heavy worker and about 150 MB for a light one, and gives the formula needed RAM = workers × ((light ratio × light RAM) + (heavy ratio × heavy RAM)). Its worked example is a server with 4 CPUs and 8 threads serving 60 concurrent users: 60 ÷ 6 gives 10 workers, (4 × 2) + 1 caps it at 9, the chosen setup is 8 workers plus one for cron, and the RAM comes to 9 × ((0.8 × 150) + (0.2 × 1024)) ≈ 3 GB.
The sample configuration also sets the per-worker limits that keep a runaway request from taking the server down: limit_memory_hard at 1,677,721,600 bytes (about 1.6 GiB), limit_memory_soft at 629,145,600 (about 600 MiB), limit_request 8192, and one cron thread. PostgreSQL sits beside the workers with its own memory, and the guide's example sets max_connections to 80.
Odoo on MassiveGRID PaaS: one-click install, about $59.04 a month for the Starter configuration (Odoo application server, 2 GiB; PostgreSQL database, 1 GiB) at $0.003372 per cloudlet-hour, before volume discounts, in New York, London, Frankfurt or Singapore. 14-day free trial, no credit card. See the sizing table.
Three company sizes, sized by the formula
A 20-person company rarely has more than six to ten users active at once: two workers plus cron, under 1 GB for Odoo and a modest PostgreSQL. A 60-user company is Odoo's own example: nine workers and about 3 GB. A 150-user company with 40 to 50 concurrent users needs seven to nine workers in theory and a CPU count to match, around 4 GB for Odoo plus a PostgreSQL buffer pool sized to the database, which by then holds years of invoices and stock moves.
What the formula does not capture is the month-end pattern: closing, payroll and reporting runs push the heavy-request ratio well past 20% for a few days. Odoo's advice is to size for the average and monitor; on an hourly-billed platform the better answer is to size for the average and let vertical scaling cover the days.
The three configurations on PaaS and their cost
The Odoo Community package on MassiveGRID PaaS installs the Odoo application server, a PostgreSQL node and a persistent filestore, with a platform subdomain and certificate. Cloudlets are 128 MiB RAM plus 400 MHz CPU, billed at $0.003372 per cloudlet-hour, $2.46 per cloudlet-month, with no licence fee for Odoo Community.
| Configuration | Odoo server | PostgreSQL | Cloudlets | Per month (730 h) | Fits |
|---|---|---|---|---|---|
| Starter | 2 GiB | 1 GiB | 24 | $59.04 | Evaluation, a handful of concurrent users |
| Standard | 4 GiB | 2 GiB | 48 | $118.08 | Odoo's 60-user example with headroom |
| Production | 2 × 4 GiB behind a load balancer | 3 GiB | 92 | $226.32 | Month-end load, 100+ users |
Those are ceilings for an always-on environment before volume discounts. The invoice reflects the cloudlets the containers actually used each hour: the Standard row's 4 GiB Odoo node that averages 2.5 GiB between month-ends is billed for 2.5 GiB. The PaaS pricing calculator prices other topologies and schedules.
Mapping Odoo's limits onto cloudlets
Set the worker count from the CPU you allocate, not the other way round. Eight cloudlets carry 3.2 GHz of CPU allocation and 1 GiB of RAM; a 4 GiB node (32 cloudlets) carries 12.8 GHz, which on the platform's scheduling behaves like three to four cores for Odoo's purposes, so 7 to 9 workers is the right range for the Standard row, matching Odoo's example almost exactly.
Keep limit_memory_hard below the node's cloudlet limit divided by the worker count, so that a single worker cannot push the container past its limit; with 4 GiB and 8 workers the sample's 1.6 GiB hard limit is fine because the soft limit recycles workers at 600 MiB long before. Let the node's cloudlet limit, not the worker limits, be the thing you raise when month-end arrives.
Put PostgreSQL on its own node, as the package does, and give it enough RAM for shared_buffers to hold the hot tables; a company database of a few gigabytes is comfortable on the Standard row's 2 GiB and wants the Production row's 3 GiB once reporting queries scan years of history.
When to scale, and which way
Vertically first. Raise the Odoo node's cloudlet limit when the memory graph hugs it or when workers are recycled constantly at the soft limit. The platform adds the cloudlets without a restart, and the month-end post shows the graph of a real closing week.
Horizontally when one node's CPU is the ceiling. The Production row's two Odoo nodes behind the platform's load balancer double the worker pool; session affinity on the balancer keeps a user on one node. Both nodes share the filestore and the same PostgreSQL.
Never on PostgreSQL by cloning. Scale the database node vertically, add read replicas only for reporting, and back it up with the Database Backup/Restore add-on on a schedule before the first month-end. The staging clone post covers how to test a module or an upgrade on a copy of all of it.
Frequently Asked Questions
How many workers should Odoo run?
Odoo's rule of thumb, from its deployment guide checked on 1 November 2026, is (number of CPUs × 2) + 1, with roughly six concurrent users per worker and one cron worker on top. For a 4 GiB Odoo node on MassiveGRID PaaS, seven to nine workers is the practical range.
How much RAM does Odoo need per user?
Odoo sizes memory by worker, not by user: about 1 GB for a heavy worker and 150 MB for a light one, with 20% of requests assumed heavy. Its worked example comes to about 3 GB for 60 concurrent users, which is the Standard configuration's 4 GiB node with headroom.
Is Odoo Community free to self-host?
Yes. Odoo Community is open source under the LGPL with no per-user fee; you pay only for the environment, from about $59.04 a month for the Starter configuration on MassiveGRID PaaS. Odoo Enterprise features require a subscription from Odoo, which the comparison post covers.
Odoo sized by Odoo's own formula
The Odoo Community package on MassiveGRID PaaS installs the application server, PostgreSQL and the filestore in one click, from about $59.04 a month for the Starter configuration, scales vertically for month-end and clones for module testing. 14-day free trial, no credit card.
Odoo on PaaS