When the Odoo web client fails to load
You open the Odoo web client and see an error screen or a stuck spinner instead of your dashboard. The browser console shows RPC_ERROR or Failed to load. Users cannot log in or access their work. This blocks operations and slows down daily tasks.
This error happens when the Odoo server cannot answer a request from the web browser. It is not a user error, but a communication or processing failure between the client and the server. The cause can be simple (like a network glitch) or deeper (like a crashed service or a corrupted module).
Common symptoms include:
- Login page does not load or shows a blank screen
- Error message:
RPC_ERROR: Session expired or invalid - Browser console shows
Failed to fetchorNetworkError - Server logs show repeated
CRITICAL odoo.service.server: Failed to initialize database - Users report intermittent access: some pages work, others do not
Root causes of RPC_ERROR in Odoo
The RPC_ERROR is a catch-all signal from the Odoo web client. To fix it, you must identify the actual cause behind the error. Below are the most common causes we see in production, grouped by impact and ease of diagnosis.
Session and authentication issues
- Expired session cookies: The browser cookie used to identify your Odoo session is invalid or too old. This often happens after server restarts or long idle sessions.
- Session store corruption: The temporary storage on the server that holds active sessions is damaged or too large, blocking new logins.
- Password reset in progress: If an admin reset another user’s password, the session token may no longer match the database state.
Database and server state issues
- Database not running: The PostgreSQL database hosting your Odoo data is stopped or unreachable.
- Odoo service crash: The Odoo server process exited unexpectedly due to an unhandled exception or memory limit.
- Database migration in progress: A pending module upgrade or migration lock prevents new connections.
- Corrupted module or upgrade failure: A custom or third-party module did not upgrade cleanly, leaving the database in an inconsistent state.
Network and deployment issues
- Reverse proxy misconfiguration: If you use Nginx, Apache, or Traefik in front of Odoo, a wrong timeout or SSL setting can drop long-running RPC calls.
- Firewall or port block: A network rule blocks traffic between the browser and the Odoo server on port 8069 (default).
- Resource exhaustion: The Odoo server runs out of memory or CPU, causing timeouts and refused connections.
Quick checks before you dig deeper
Start here. These checks take less than five minutes and often resolve the issue without downtime or code changes.
Check 1: Is the Odoo server running?
On the server, run:
systemctl is-active odoo
If it says inactive or failed, restart it:
sudo systemctl restart odoo
Success: The service restarts cleanly and the web client loads. If it fails again, check the logs for errors.
Check 2: Can you reach the Odoo port?
On your local machine or a server terminal, test connectivity to the Odoo port (default 8069):
curl -v http://localhost:8069
If you see HTML output with <title>Odoo</title>, the server is reachable. If the connection times out or is refused, the service is not listening or blocked.
Check 3: Is PostgreSQL running?
Odoo relies on PostgreSQL. Check its status:
systemctl is-active postgresql
If it is down, restart it:
sudo systemctl restart postgresql
Success: PostgreSQL is running and Odoo can connect to the database.
Check 4: Clear browser cookies and cache
Open an incognito window and navigate to your Odoo instance. If it loads, the issue was a stale session cookie. If not, proceed to the next steps.
If the quick checks fail, follow this diagnostic path
Use the table below to isolate the cause. Each row maps symptoms to actions. Follow the first matching row.
| Symptom | Where to look | Action | Expected result |
|---|---|---|---|
| Login page blank or spinning | Browser console (F12 > Console) |
|
Error message points to session or database. |
| Odoo server restarts automatically or crashes | journalctl -u odoo (last 20 lines) |
Look for CRITICAL or ERROR lines with init db, upgrade, or memory. |
Crash reason is clear (e.g., memory limit, module upgrade failure). |
| Database not found or connection refused | psql -U odoo -d postgres then \l |
List databases; confirm your Odoo database exists. | Database name matches your Odoo configuration. |
| Module upgrade stuck or lock held | odoo-bin -d yourdb --stop-after-init --log-level=debug |
Watch for Holding lock or Upgrade failed. |
Upgrade completes or error is clear. |
Tip: If you are unsure which database your Odoo instance uses, check the configuration file:
grep db_name /etc/odoo/odoo.conf
Replace /etc/odoo/odoo.conf with your actual config path.
Step-by-step fixes for common scenarios
Below are the most frequent fixes, ordered by safety and speed. Only proceed if you are sure of the cause from the diagnostic table above.
Scenario A: Session cookie expired (most common)
- Close all browser tabs pointed at your Odoo instance.
- Clear all cookies for your domain (Chrome: Settings > Privacy > Clear data > Cookies).
- Restart Odoo to clear server-side session cache:
sudo systemctl restart odoo - Open a fresh incognito window and log in again.
Success: You see the dashboard without errors.
Scenario B: Odoo service crashed due to memory limits
- Check memory usage:
free -h && ps aux --sort=-%mem | head -5Look for
0.0% swap usedandused > 80%in memory. - Increase Odoo memory limit in the config file:
limit_memory_hard = 2684354560 # 2.5 GBRestart Odoo after the change.
- Verify stability over 10 minutes of normal use.
Success: No crashes and performance is acceptable.
Scenario C: Module upgrade failure after a custom addon install
If you recently installed a custom addon from /odoo-custom-addons.html and now Odoo fails to start or shows RPC_ERROR, the upgrade likely failed.
- Stop Odoo:
sudo systemctl stop odoo - Run upgrade in debug mode:
odoo-bin -d yourdb --stop-after-init --log-level=debug 2>&1 | grep -i errorLook for module names with
ERRORorfailed. - Fix the module:
- If the error is a simple Python syntax issue, correct the file in your custom addons folder.
- If the error is a database schema mismatch, restore the database from a backup before the upgrade and retry with the corrected module.
- Reinstall the module cleanly:
odoo-bin -d yourdb -i module_name --stop-after-init - Start Odoo and verify the module loads:
sudo systemctl start odoo
Scenario D: PostgreSQL unreachable or database missing
sudo -u postgres psql -c "SELECT 1;"
Success: PostgreSQL responds with 1.
sudo -u postgres psql -c "\l" | grep yourdb
If missing, restore from a recent backup or recreate from scratch (not recommended for production).
db_user = odoo
db_password = yourpassword
db_host = localhost
db_port = 5432
Verification and risk management after the fix
After applying a fix, verify that the issue is resolved and that no new risks were introduced.
Verification checklist
- Login test: Log in as two different users. Confirm dashboards load and modules respond.
- Data integrity: Open a form view and save a record. Check the record appears correctly in a list view.
Example: Open a Sales Order, edit the customer, save, then reload the list. The customer field should update.
- Module function test: If you fixed a custom module from /odoo-custom-addons.html, run the module’s custom action (e.g., a custom report or import).
- Performance check: Navigate through three screens in under 5 seconds each. If slow, check server CPU and memory again.
top -b -n1 | grep odoo
Risk considerations
- Data loss: Avoid database restarts or PostgreSQL service stops during peak hours. Schedule maintenance windows if needed.
- Module regression: After a custom addon upgrade, test integration features like /odoo-integration.html (e.g., payment gateways, EDI, or API calls).
- Downtime cost: If Odoo is critical for operations, consider a blue-green deployment or a staging clone to test fixes before applying to production.
Tip: If you are on a managed Odoo plan, review your /odoo-pricing.html support tier before making changes. Some plans include 24/7 incident response.
When to seek help and what to tell support
If the issue persists after 30 minutes of troubleshooting, or if you see data corruption, it is time to escalate. The information below will help support teams resolve the issue faster.
Escalation triggers
- Repeated server crashes (more than twice in one hour)
- Database corruption warnings in logs
- Custom module errors that you cannot resolve from source code
- Odoo version mismatch between server and client (e.g., 16.0 client vs 15.0 server)
Information to collect before contacting support
- Odoo version: Run
odoo-bin --versionand share the output. - Database name: Confirm the database name used in the Odoo config.
- Error logs: Collect the last 50 lines from
journalctl -u odoo -n 50andsudo tail -50 /var/log/odoo/odoo-server.log. - Custom addons list: List modules installed:
odoo-bin -d yourdb --list-dbthenodoo-bin -d yourdb --list-modules. - Recent changes: Note any module upgrades, config changes, or network changes in the last 24 hours.
Example support message:
Subject: Persistent RPC_ERROR after module upgrade on Odoo 16.0
After upgrading the
account_invoice_exportmodule from custom addons, Odoo crashes on startup withCRITICAL odoo.service.server: Failed to initialize database. The error repeats every restart. We tried clearing sessions and restarting PostgreSQL. No change. Database isprod_2024. Versions: Odoo 16.0 (2024-04-01), PostgreSQL 14. Attached logs and config.
This level of detail reduces resolution time from hours to minutes.
Preventing RPC_ERROR in the future
Stability is built on routine checks and safe deployment practices. Below are practical steps to reduce the chance of RPC_ERROR recurring.
Maintenance routine for operations teams
- Daily log scan: Check Odoo and PostgreSQL logs for warnings or errors. Use:
sudo tail -20 /var/log/odoo/odoo-server.log - Weekly session cleanup: Clear old sessions from the database to avoid bloat:
odoo-bin -d yourdb --clean-registry - Monthly PostgreSQL maintenance: Run
VACUUM ANALYZEon large tables to keep the database fast:sudo -u postgres psql -d yourdb -c "VACUUM ANALYZE;" - Pre-upgrade checklist for custom addons:
- Test upgrades in a staging environment that mirrors production.
- Backup the database before any module upgrade.
pg_dump -U odoo -d yourdb -Fc -f /backups/yourdb-$(date +%F).dump - Use
--stop-after-initto verify module loads before exposing to users.\li>
Deployment best practices
- Use a reverse proxy with proper timeouts to avoid dropped RPC calls. Example Nginx snippet:
proxy_read_timeout 300s; proxy_connect_timeout 300s; - Set memory limits in Odoo config to prevent crashes:
limit_memory_hard = 3221225472 # ~3 GB - Monitor Odoo health with a simple endpoint check:
curl -I http://localhost:8069/web | head -1Should return
HTTP/1.1 200 OKor302(redirect to login).
Tip: If you run Odoo on-premises, consider using a process manager like supervisord to auto-restart Odoo if it crashes. Example config:
[program:odoo]
command=/usr/bin/odoo-bin -c /etc/odoo/odoo.conf
autostart=true
autorestart=true
stderr_logfile=/var/log/odoo/error.log
stdout_logfile=/var/log/odoo/access.logKey takeaways and your next action
RPC_ERROR in the Odoo web client is usually a symptom, not the root cause. Most incidents resolve by checking sessions, server status, and database connectivity. When custom modules or upgrades are involved, restoring from a backup or fixing the module code is often required.
Do this today to reduce risk:
- Check if Odoo and PostgreSQL are running. If not, restart them in the correct order (PostgreSQL first, then Odoo).
- Clear browser cookies for your Odoo domain and try again.
- If the issue started after a module upgrade, review the module code and logs before applying the fix.
If you are unsure, collect the logs and error messages, then escalate using the template in the When to seek help section. Acting early prevents data loss and long outages.
Practical Next Step
Check your Odoo logs now
Discuss Your Odoo ScopeFAQ
What is an RPC_ERROR in Odoo?
RPC_ERROR is a generic error from the Odoo web client when it cannot complete a remote procedure call to the Odoo server. It means the client sent a request (e.g., load a form, save a record) but the server did not respond successfully. The error can be caused by network issues, session problems, database errors, or server crashes.
Why does RPC_ERROR happen after a custom addon install?
When you install a custom addon from /odoo-custom-addons.html, Odoo runs a database upgrade to add new fields and tables. If the module has a bug, syntax error, or dependency conflict, the upgrade fails. This leaves the database in an inconsistent state, causing RPC calls to fail with RPC_ERROR or server crashes.
How do I know if the issue is a session problem or a server problem?
Check the browser console for RPC_ERROR: Session expired or invalid. If you see this, clear cookies and restart Odoo. If the error persists after clearing sessions, check server status and logs for crashes or database errors. A session problem is usually fixed by restarting Odoo and clearing cookies; a server problem requires deeper diagnosis.
Can I safely restart Odoo during business hours?
Yes, if you follow a safe restart order: stop Odoo, check PostgreSQL is running, then start Odoo. The restart takes less than 30 seconds and does not corrupt data. However, avoid restarts during critical operations like month-end close or large data imports. Always notify users before restarting.
What should I do if the database is corrupted after an RPC_ERROR?
Stop Odoo immediately. Do not attempt repairs while Odoo is running. Restore the database from a recent backup. If no backup exists, contact a database specialist or your Odoo support team. Running Odoo with a corrupted database can cause further data corruption and make recovery harder.