Để tối ưu RAM và CPU cho n8n Docker trên VPS, bạn cần kiểm tra mức sử dụng tài nguyên, thiết lập giới hạn cho container, giảm dữ liệu thực thi được lưu trữ và kiểm soát số workflow chạy đồng thời. Với những workflow xử lý lượng dữ liệu lớn, việc chia nhỏ tác vụ cũng giúp hạn chế tình trạng quá tải. Cùng Tino tìm hiểu cách thực hiện qua bài viết dưới dây nhé!
Tại sao n8n chạy trên Docker tốn RAM và CPU?
Lượng RAM mà n8n dùng phụ thuộc chủ yếu vào khối lượng dữ liệu mỗi workflow xử lý, không phải số lượng workflow. n8n chạy trên Node.js và giữ dữ liệu của một execution trong bộ nhớ suốt quá trình xử lý. Tài liệu chính thức của n8n cũng lưu ý rằng n8n không tự giới hạn lượng dữ liệu mà mỗi node được phép lấy về.
Những nguyên nhân phổ biến khiến RAM tăng cao:
- Một lần chạy kéo về quá nhiều dữ liệu: ví dụ đọc hàng chục nghìn dòng Google Sheets hoặc gọi API không phân trang.
- Xử lý file trong bộ nhớ: ảnh, PDF, file Excel (gọi chung là binary data) được giữ trong RAM nếu chưa cấu hình lưu ra ổ đĩa.
- Code node xử lý mảng lớn: mỗi lần biến đổi dữ liệu có thể tạo thêm bản sao trong bộ nhớ.
- Chạy thủ công với dữ liệu lớn: khi bấm Execute workflow trong trình soạn thảo, n8n phải chuẩn bị thêm dữ liệu để hiển thị trên giao diện.
- Nhiều execution chạy song song: ở chế độ mặc định, số execution đồng thời không bị giới hạn, nên một đợt webhook dồn dập có thể làm RAM tăng vọt.
- Lưu trữ vector trong bộ nhớ: các workflow AI Agent dùng Simple Vector Store lưu dữ liệu vector ngay trong RAM của n8n.
CPU thì khác: n8n phần lớn thời gian chỉ chờ phản hồi từ API bên ngoài, nên CPU thường thấp. CPU tăng cao kéo dài thường đến từ vòng lặp nặng trong Code node, phân tích JSON hoặc file lớn, nhiều execution chạy cùng lúc, hoặc database SQLite đã phình to khiến mỗi truy vấn chậm hơn.

VPS cần bao nhiêu RAM và CPU để chạy n8n?
Với nhu cầu cá nhân hoặc nhóm nhỏ, VPS 2 vCPU và 4 GB RAM là mức cân bằng tốt; 1 vCPU và 1–2 GB RAM vẫn chạy được nếu workflow nhẹ và đã áp dụng các bước tối ưu bên dưới. Bảng sau là mức gợi ý tham khảo, không phải thông số chính thức từ n8n:
Nhu cầu sử dụng vCPU RAM Lưu ý Học, thử nghiệm, vài workflow đơn giản chạy định kỳ 1 1–2 GB Nên tạo swap, SQLite vẫn đủ dùng Cá nhân hoặc nhóm nhỏ, webhook vừa phải, ít xử lý file 2 4 GB Nên dùng PostgreSQL Nhiều webhook, xử lý file lớn, nhiều workflow AI Agent 4 trở lên 8 GB trở lên Cân nhắc queue mode
rước khi nâng cấp VPS, hãy làm các bước tối ưu cấu hình trước. Nhiều trường hợp RAM cao đến từ lịch sử execution tích lũy hoặc một workflow thiết kế chưa hợp lý, không phải do VPS quá yếu.
Cần chuẩn bị gì trước khi tối ưu?
- Quyền SSH vào VPS với tài khoản có sudo. Các lệnh trong bài dùng cho Ubuntu/Debian.
- n8n đang chạy bằng Docker Compose (VPS chưa có Docker: xem mục ngay bên dưới). Bài viết giả định service trong file docker-compose.yml tên là n8n; nếu đặt tên khác, thay tên tương ứng trong các lệnh.
- Bản sao lưu dữ liệu, gồm volume chứa thư mục /home/node/.n8n và giá trị N8N_ENCRYPTION_KEY. Thiếu khóa mã hóa, credentials sẽ không thể giải mã sau khi khôi phục.
- Biết phiên bản n8n đang dùng, vì một số biến môi trường có giá trị mặc định khác nhau giữa các phiên bản.

Hướng dẫn tối ưu RAM và CPU cho n8n Docker trên VPS
Bước 1 – Kiểm tra và cài đặt Docker trên VPS
Đầu tiên, kết nối SSH vào VPS bằng Xshell hoặc Terminal.
Kiểm tra Docker:
docker --version
Tiếp tục kiểm tra Docker Compose:
docker compose version
Nếu cả hai lệnh hiển thị phiên bản, bạn có thể chuyển sang Bước 2.

Trường hợp VPS chưa cài Docker, thực hiện lần lượt các lệnh sau.
Cập nhật hệ thống và cài công cụ cần thiết:
sudo apt update
sudo apt install -y ca-certificates curl
Thêm khóa xác thực Docker:
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
Thêm kho phần mềm chính thức:
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: (./etc/os-release&&echo"{UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
Cài đặt Docker Engine và Docker Compose:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Khởi động dịch vụ Docker:
sudo systemctl enable --now docker
Kiểm tra kết quả:
sudo docker run --rm hello-world
Nếu xuất hiện thông báo Hello from Docker!, Docker đã được cài đặt thành công.
Lưu ý: Nếu Docker đã được cài từ trước nhưng thiếu Compose, chỉ cần cài thêm Compose plugin theo hướng dẫn chính thức. Không cần cài đặt lại toàn bộ Docker Engine.
Nếu VPS hoàn toàn mới và chưa triển khai n8n, bạn cần cài đặt n8n bằng Docker Compose trước khi chuyển sang các bước tối ưu tài nguyên.
Bước 2 – Kiểm tra mức sử dụng RAM và CPU
Trước khi tối ưu, bạn cần biết VPS đang sử dụng bao nhiêu tài nguyên.
Kiểm tra RAM:
free -h
Kiểm tra số CPU logic:
nproc
Tiếp theo, kiểm tra các container đang chạy:
sudo docker ps

Nếu đã có container n8n, tiếp tục chạy:
sudo docker stats
Kết quả sẽ hiển thị mức sử dụng RAM và CPU theo thời gian thực.
Trong đó:
- CPU %: Mức sử dụng CPU của container.
- MEM USAGE / LIMIT: Lượng RAM đang sử dụng và giới hạn bộ nhớ.
- MEM %: Tỷ lệ RAM đang sử dụng so với giới hạn.

Nhấn Ctrl + C để dừng theo dõi.
Bạn cũng có thể kiểm tra một lần bằng lệnh:
sudo docker stats --no-stream
Hãy ghi lại mức sử dụng RAM, CPU khi workflow đang chạy để so sánh sau khi tối ưu.
Bước 3 – Tìm và sao lưu tệp Docker Compose
Để chỉnh sửa cấu hình RAM và CPU, trước tiên bạn cần xác định vị trí tệp Docker Compose đang quản lý n8n.
Cách 1: Tìm bằng Docker Compose
Chạy lệnh:
sudo docker compose ls
Trong ví dụ này, tệp Docker Compose nằm tại:
/opt/n8n/docker-compose.yml

Cách 2: Tìm thủ công nếu chưa xác định được đường dẫn
Chạy:
sudo find /opt /root /home /srv -type f -name"compose.yaml"-o-name"compose.yml"-o-name"docker-compose.yml"-o-name"docker-compose.yaml" 2>/dev/null
Lệnh sẽ tìm những tệp Compose trong các thư mục phổ biến. Nếu có nhiều kết quả, cần xác định đúng tệp đang quản lý container n8n.
Sau khi tìm được đường dẫn, chuyển đến thư mục tương ứng. Ví dụ:
cd /opt/n8n
Kiểm tra các tệp:
ls -la

Tiếp theo, sao lưu tệp cấu hình:
cp docker-compose.yml docker-compose.yml.bak
Lưu ý: Lệnh trên áp dụng khi tệp hiện tại có tên docker-compose.yml.
Quan trọng: Bản sao lưu Compose không thay thế bản sao lưu dữ liệu n8n. Với VPS đang hoạt động, bạn nên sao lưu cả cơ sở dữ liệu, khóa mã hóa và volume lưu trữ trước khi thay đổi cấu hình.
Bước 4 – Mở Docker Compose và thiết lập giới hạn RAM, CPU
Sau khi xác định được thư mục chứa Docker Compose, bạn có thể mở tệp bằng trình soạn thảo Nano ngay trên VPS.
Trước tiên, bảo đảm đang ở đúng thư mục đã xác định tại Bước 3. Ví dụ:
cd /opt/n8n
Nếu VPS chưa có Nano, cài đặt bằng lệnh:
sudo apt install -y nano
Sau đó, mở tệp:

sudo nano docker-compose.yml
Sau khi nhấn Enter, nội dung tệp cấu hình sẽ xuất hiện trực tiếp trong cửa sổ Xshell.
Trong Nano, sử dụng phím mũi tên để di chuyển đến phần:
services:
n8n:
Tại đây, bổ sung hai thuộc tính:
cpus: "1.0"
mem_limit: 2g
Ví dụ, cấu trúc sau khi bổ sung sẽ có dạng:
services:
n8n:
cpus: "1.0"
mem_limit: 2g
Đây chỉ là đoạn minh họa vị trí khai báo. Không xóa hoặc thay thế các cấu hình image, ports, volumes, environment và những thuộc tính đã tồn tại.
Giải thích:
- cpus: “1.0”: Giới hạn năng lực xử lý của container tương đương một CPU logic.
- mem_limit: 2g: Giới hạn bộ nhớ container ở mức 2 GiB.
Ví dụ này phù hợp để minh họa trên VPS có 2 vCPU và 4 GB RAM, nhưng không phải cấu hình chuẩn cho mọi hệ thống. Nếu workflow thường xuyên sử dụng nhiều RAM hơn, giới hạn 2 GiB có thể khiến container bị dừng do thiếu bộ nhớ.

Sau khi hoàn tất chỉnh sửa trong Nano:
- Nhấn Ctrl + O để lưu.
- Nhấn Enter để xác nhận tên tệp.
- Nhấn Ctrl + X để thoát.
Bạn sẽ quay lại giao diện dòng lệnh SSH.
Bước 5 – Điều chỉnh cấu hình n8n để giảm tiêu thụ tài nguyên
Ngoài giới hạn Docker, bạn có thể giảm dữ liệu thực thi được lưu trữ và hạn chế số workflow chạy đồng thời.
Mở lại tệp Docker Compose:
sudo nano docker-compose.yml
Tìm phần environment bên trong service n8n, sau đó bổ sung các biến sau:
environment:
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none
- EXECUTIONS_DATA_SAVE_ON_ERROR=all
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=1000
- N8N_CONCURRENCY_PRODUCTION_LIMIT=2
Nếu tệp đã có phần environment, chỉ bổ sung các biến còn thiếu vào phần hiện tại. Không tạo thêm một mục environment thứ hai. Ví dụ trên dùng kiểu danh sách; nếu cấu hình hiện tại dùng kiểu KEY: VALUE, cần giữ nguyên định dạng đó.

Các thiết lập có tác dụng:
Cấu hình Tác dụng SAVE_ON_SUCCESS=noneKhông lưu dữ liệu các lượt chạy thành công SAVE_ON_ERROR=allGiữ dữ liệu lượt chạy lỗi để kiểm tra PRUNE=trueBật dọn dẹp lịch sử thực thi MAX_AGE=168Giới hạn thời gian lưu lịch sử ở mức 7 ngày PRUNE_MAX_COUNT=1000Đặt ngưỡng số lượt thực thi được lưu CONCURRENCY_PRODUCTION_LIMIT=2Giới hạn 2 lượt chạy production đồng thời
Lưu ý: Các thiết lập lưu lịch sử giúp giảm dữ liệu cơ sở dữ liệu tích lũy theo thời gian, không trực tiếp bảo đảm giảm RAM đang sử dụng. Giới hạn concurrency trong regular mode áp dụng cho các lượt chạy production từ webhook hoặc trigger, không giới hạn toàn bộ lượt chạy thủ công.
Nếu workflow thường xuyên xử lý hình ảnh, PDF hoặc tệp dung lượng lớn, bạn có thể cân nhắc bổ sung:
- N8N_DEFAULT_BINARY_DATA_MODE=filesystem
Thiết lập này chuyển việc lưu dữ liệu tệp từ RAM sang ổ đĩa. Chỉ áp dụng với regular mode và bảo đảm thư mục dữ liệu được lưu trữ bền vững. Không sử dụng filesystem cho Queue Mode.
Sau khi chỉnh sửa, nhấn Ctrl + O → Enter → Ctrl + X để lưu và thoát.
Bước 6 – Áp dụng cấu hình và kiểm tra kết quả
Sau khi hoàn thành các thay đổi, bạn cần kiểm tra cú pháp Docker Compose trước khi áp dụng.
Đảm bảo vẫn đang ở thư mục chứa tệp cấu hình, sau đó chạy:
sudo docker compose config -q
Nếu không có thông báo lỗi, tiến hành áp dụng thay đổi:
sudo docker compose up -d --no-deps n8n
Lệnh này cập nhật service n8n mà không chủ động khởi động các service phụ thuộc. Container có thể được tạo lại, vì vậy nên thực hiện khi không có workflow quan trọng đang chạy.

Nếu service không có tên n8n, sử dụng lệnh sau để kiểm tra tên chính xác:
sudo docker compose config --services
Sau đó, kiểm tra trạng thái:
sudo docker compose ps
Kiểm tra nhật ký hoạt động:
sudo docker compose logs --tail=100 n8n

Cuối cùng, theo dõi mức sử dụng tài nguyên:
sudo docker stats

Để xác nhận quá trình tối ưu thành công, hãy:
- Truy cập giao diện n8n và kiểm tra workflow.
- Chạy thử một workflow thường sử dụng.
- Theo dõi RAM và CPU trong thời gian thực thi.
- Kiểm tra xem workflow có hoàn thành bình thường hay không.
- So sánh mức sử dụng tài nguyên với kết quả trước khi chỉnh sửa.
Nếu container liên tục bị khởi động lại hoặc workflow bị gián đoạn, hãy kiểm tra logs và cân nhắc tăng giới hạn RAM, CPU theo nhu cầu thực tế.
Ngoài ra, bạn có thể xác nhận giới hạn CPU và RAM đã áp dụng bằng lệnh:
docker inspect n8n-n8n-1 --format 'CPU={{.HostConfig.NanoCpus}} RAM={{.HostConfig.Memory}}'
Nếu đúng với cấu hình đã nhập, kết quả sẽ là:
CPU=1000000000 RAM=2147483648

Lưu ý cuối: Nếu n8n được triển khai bằng nhiều tệp Compose, hoặc được quản lý thông qua Portainer hay hệ thống cài đặt tự động, cần chỉnh sửa và áp dụng cấu hình bằng đúng phương pháp quản lý ban đầu. Không nên tạo một tệp Compose mới rồi chạy thay cho hệ thống đang hoạt động.
Một số cách tối ưu workflow n8n để giảm tải VPS
- Chia dữ liệu thành từng phần nhỏ bằng node Loop Over Items, ví dụ mỗi lượt 50–200 bản ghi thay vì xử lý cả nghìn bản ghi một lúc.
- Phân trang khi gọi API. Node HTTP Request có tùy chọn Pagination; lấy từng trang thay vì một lần trả về toàn bộ.
- Tách thành sub-workflow bằng node Execute Workflow, và chỉ trả về lượng dữ liệu thật sự cần cho workflow chính. Bộ nhớ của sub-workflow được giải phóng sau khi chạy xong.
- Lọc sớm, giữ ít trường. Đặt node Filter hoặc Edit Fields ngay sau bước lấy dữ liệu để bỏ các bản ghi và trường không dùng đến.
- Hạn chế Code node cho dữ liệu lớn. Ưu tiên node có sẵn; khi bắt buộc dùng Code node, tránh tạo nhiều bản sao của cùng một mảng.
- Không thử nghiệm dữ liệu lớn bằng cách chạy thủ công. Dùng một mẫu nhỏ hoặc tính năng ghim dữ liệu (pin data) khi xây dựng workflow.
- Giãn lịch chạy. Tránh để nhiều Schedule Trigger cùng chạy vào phút 00; lệch nhau vài phút giúp CPU và RAM không dồn vào một thời điểm.
- Với workflow AI Agent, dùng vector database bên ngoài (Qdrant, PGVector, Pinecone…) thay cho Simple Vector Store, và giới hạn độ dài ngữ cảnh trong node bộ nhớ hội thoại.

Những lỗi thường gặp khi tối ưu RAM và CPU cho n8n
Sau khi thay đổi cấu hình, n8n có thể gặp một số vấn đề nếu giới hạn tài nguyên chưa phù hợp.
Vấn đề Cách khắc phục n8n tự khởi động lại Kiểm tra nhật ký Docker và giới hạn RAM Workflow chạy chậm Kiểm tra giới hạn CPU, concurrency và khối lượng xử lý Lỗi Out of Memory Giảm dữ liệu xử lý hoặc tăng RAM khi cần CPU luôn ở mức cao Kiểm tra workflow chạy liên tục hoặc vòng lặp chưa kết thúc Không truy cập được n8n Kiểm tra trạng thái container, cấu hình và Docker logs
Để kiểm tra nhật ký container n8n, sử dụng lệnh sau trong thư mục Docker Compose:
sudo docker compose logs --tail=100 n8n
Dựa vào thông báo lỗi, bạn có thể xác định hướng xử lý phù hợp thay vì thay đổi nhiều cấu hình cùng lúc.
Khi nào nên nâng cấp VPS chạy n8n?
Bạn nên cân nhắc nâng cấp VPS khi đã tối ưu Docker và workflow nhưng vẫn gặp các tình trạng:
- RAM thường xuyên gần hết khi chạy workflow.
- CPU liên tục quá tải, làm chậm quá trình xử lý.
- Workflow bị gián đoạn do thiếu tài nguyên.
- Số lượng workflow và lượt thực thi đồng thời ngày càng tăng.
Nếu cần xử lý nhiều workflow song song, bạn cũng có thể nghiên cứu Queue Mode. Chế độ này sử dụng Redis và các worker riêng để phân phối công việc, phù hợp với hệ thống cần mở rộng khả năng xử lý.

Tuy nhiên, Queue Mode yêu cầu thêm tài nguyên và cấu hình phức tạp hơn. Với VPS nhỏ, nâng cấp RAM hoặc CPU thường là phương án đơn giản hơn.
Xem ngay VPS cài sẵn n8n tại: https://tino.vn/vps-n8n
Kết luận
Tối ưu RAM và CPU cho n8n Docker trên VPS không chỉ là thiết lập giới hạn tài nguyên container mà còn cần điều chỉnh cấu hình thực thi và cách thiết kế workflow. Những thay đổi phù hợp sẽ giúp giảm nguy cơ quá tải, hạn chế lỗi thiếu bộ nhớ và duy trì hoạt động ổn định.
Sau khi tối ưu, hãy tiếp tục theo dõi RAM, CPU bằng docker stats và kiểm tra hiệu suất thực tế của workflow. Nếu nhu cầu xử lý vượt khả năng VPS hiện tại, bạn nên cân nhắc nâng cấp cấu hình để bảo đảm hệ thống hoạt động lâu dài.
Những câu hỏi thường gặp
8n có chạy ổn định trên VPS 1 GB RAM không?
Được, nếu workflow nhẹ: chủ yếu gọi API, ít xử lý file, không có nhiều webhook cùng lúc. Nên dùng SQLite để khỏi tốn RAM cho PostgreSQL, tạo swap 1–2 GB, giới hạn container khoảng 640M và bật dọn dẹp execution. Với workflow AI Agent hoặc xử lý file thường xuyên, nên chọn VPS từ 2 GB trở lên.
Xóa execution trên giao diện có giải phóng dung lượng ổ đĩa ngay không?
Không hẳn. Bản ghi bị xóa khỏi database, nhưng file SQLite giữ nguyên kích thước cho đến khi được thu gọn bằng DB_SQLITE_VACUUM_ON_STARTUP=true và khởi động lại. Với PostgreSQL, cơ chế autovacuum cho phép tái sử dụng vùng trống; muốn trả dung lượng về cho hệ điều hành thì cần chạy VACUUM FULL vào lúc ít tải.
Giới hạn CPU có làm workflow chạy sai hoặc mất dữ liệu không?
Không. Giới hạn CPU chỉ làm tiến trình chạy chậm hơn khi chạm ngưỡng, dữ liệu vẫn được xử lý đầy đủ. Rủi ro duy nhất là workflow kéo dài hơn, có thể vượt timeout của dịch vụ gọi webhook hoặc của chính EXECUTIONS_TIMEOUT. Nếu thấy hiện tượng này, nâng nhẹ giá trị cpus.
Workflow AI Agent có tốn RAM hơn workflow thông thường không?
Phần suy luận của mô hình chạy trên máy chủ của nhà cung cấp như OpenAI hay Anthropic, nên bản thân lời gọi không tốn nhiều RAM. RAM tăng chủ yếu do lịch sử hội thoại dài, tài liệu lớn được nạp vào để xử lý và Simple Vector Store lưu vector ngay trong bộ nhớ n8n.
Vì sao n8n sử dụng nhiều CPU dù không mở giao diện?
Các workflow tự động vẫn có thể hoạt động thông qua Schedule Trigger, Webhook hoặc các trigger khác. Bạn nên kiểm tra lịch sử thực thi và những workflow đang chạy để xác định nguyên nhân.
Có cần khởi động lại n8n sau khi thay đổi cấu hình không?
Có. Khi thay đổi giới hạn tài nguyên hoặc biến môi trường trong Docker Compose, bạn cần áp dụng lại cấu hình để thay đổi có hiệu lực. Thao tác này có thể tạo lại container và gây gián đoạn tạm thời.
