Có thể cân nhắc chạy 5 ứng dụng trên VPS 2GB RAM, nhưng chưa thể khẳng định ổn định chỉ từ hai con số này. Theo tài liệu Docker, cần kiểm tra nhu cầu bộ nhớ của ứng dụng trước khi đưa vào vận hành. Container mặc định không có giới hạn tài nguyên; khi máy thiếu bộ nhớ, Linux có thể kết thúc tiến trình. Vì vậy, quyết định nên dựa vào phép đo dưới tải dự kiến, thay vì số ứng dụng khởi động thành công.
Bài hướng dẫn này đưa ra cách đánh giá, không phải kết quả benchmark một cấu hình cụ thể. Chưa có danh sách phần mềm, lượng truy cập, dữ liệu hay thông số CPU và ổ đĩa của VPS cần xét. Do đó, không có căn cứ để cam kết số người dùng hoặc thời gian phản hồi. Các ngân sách RAM dưới đây là tình huống giả định để người quản trị tự đối chiếu.
Tính ngân sách cho toàn máy, không chia đều cho 5 ứng dụng
Trước tiên, hãy liệt kê các thành phần thực sự phải vận hành: từng ứng dụng, cơ sở dữ liệu, tiến trình nền và dịch vụ hệ thống. Docker mô tả container là tiến trình chạy trên máy chủ với môi trường được cô lập. Từ cơ chế này, không nên hiểu mỗi container có một kho RAM riêng ngoài dung lượng VPS. Cũng cần thống nhất cách đếm: năm sản phẩm phục vụ người dùng và năm container là hai phạm vi cần kiểm kê riêng.
Ví dụ giả định: trên một máy báo tổng RAM sử dụng được là 2.048MiB, người quản trị dự kiến dành 500MiB cho hệ thống và dịch vụ chung, 1.200MiB cho nhóm ứng dụng, còn 348MiB dự phòng. Đây chỉ là phép lập ngân sách, không phải mức tiêu thụ đo được hay khuyến nghị áp dụng cho mọi máy. Hãy thay từng số bằng kết quả quan sát, đồng thời ghi rõ thành phần nào đã được tính để tránh cộng hai lần.
Nếu có PostgreSQL, nên xem lại cả cấu hình kết nối và bộ nhớ truy vấn. Tài liệu PostgreSQL giải thích rằng tăng max_connections làm tăng một số tài nguyên được cấp phát, gồm bộ nhớ dùng chung; nhiều thao tác truy vấn đồng thời cũng có thể khiến tổng bộ nhớ vượt nhiều lần work_mem. Hướng thực hành là kiểm kê nhu cầu kết nối của cả năm ứng dụng trước khi tăng cấu hình, thay vì coi giới hạn kết nối lớn hơn luôn có lợi.

Đo ở cấp máy và container, rồi thử tải có kiểm soát
Bước 1 — trên VPS Linux cần đánh giá, đọc bộ nhớ bằng lệnh: free -m. Theo tài liệu free và proc_meminfo, cột available ước tính lượng bộ nhớ có thể dùng để khởi chạy ứng dụng mới mà chưa cần swap; cột free chỉ phản ánh phần đang không sử dụng. Hãy ghi lại total, available và swap ở trạng thái nền, rồi đối chiếu sau khi bật từng dịch vụ. Đừng chỉ nhìn một con số RAM trống.
Bước 2 — nếu dùng Docker, lấy một ảnh chụp số liệu bằng lệnh: docker stats --no-stream. Tài liệu Docker cho biết công cụ cung cấp các chỉ số tài nguyên container; trên Linux, phần hiển thị bộ nhớ của CLI đã trừ một phần cache. Vì vậy, hãy dùng nó để so sánh các container, kết hợp với số liệu toàn máy ở bước trước. Không coi tổng cột bộ nhớ container là phép kiểm kê đầy đủ mọi thành phần trên VPS.
Bước 3 — lập kịch bản thử nghiệm đại diện cho công việc thực tế: mở các chức năng chính, thực hiện truy vấn và chạy tác vụ nền mà bạn dự kiến sử dụng. Ghi thời điểm, mức tải, bộ nhớ và thời gian phản hồi; sau đó thử tình huống các công việc trùng nhau. Đây là quy trình đánh giá đề xuất, không phải tuyên bố rằng máy đã được kiểm thử. Nên thống nhất trước thời gian phản hồi và mức lỗi có thể chấp nhận.
Bước 4 — nếu hệ thống hỗ trợ PSI, đọc thêm bằng lệnh: cat /proc/pressure/memory. Tài liệu Linux giải thích some là tỷ lệ thời gian có tác vụ phải chờ tài nguyên; full phản ánh tình trạng mọi tác vụ không nhàn rỗi cùng bị chờ. Nên đối chiếu thay đổi này với lúc phản hồi chậm. Các lệnh quan sát trên chỉ đọc thông tin, không cần hoàn tác cấu hình; bài viết không yêu cầu thay swap, tường lửa hay SSH.

Giới hạn tài nguyên và quyết định có nên nâng cấp
Sau khi có số liệu, hãy cân nhắc đặt giới hạn bộ nhớ cho từng container theo nhu cầu đã quan sát. Docker hỗ trợ giới hạn cứng và mềm, nhưng giới hạn không tạo thêm RAM cho máy. Khuyến nghị là lưu cấu hình cũ, thử từng thay đổi trong môi trường kiểm tra và xác nhận chức năng vẫn hoạt động. Nếu kết quả xấu đi, phục hồi cấu hình trước đó; không dùng việc tắt OOM killer làm cách xử lý thiếu bộ nhớ.
Swap cũng cần được hiểu đúng: tài liệu Docker lưu ý việc chuyển bộ nhớ ra đĩa thường xuyên có chi phí hiệu năng. Với Docker, --memory-swap là trần tổng RAM và swap khi đi cùng --memory; đặt hai giá trị bằng nhau sẽ ngăn container dùng swap. Vì thế, đừng cộng dung lượng swap vào RAM rồi suy ra sức chứa ứng dụng. Nếu phép thử chỉ đạt yêu cầu sau khi giảm công việc đồng thời, hãy cân nhắc điều chỉnh lịch tác vụ, tách dịch vụ hoặc nâng RAM và đo lại trước khi chốt cấu hình.


