Nỗi ám ảnh mang tên Out of Memory (OOM)
Cảnh tượng thường thấy: VPS 1GB RAM chạy 3-4 container Docker bỗng dưng “đứng hình”, website báo lỗi 502, và log hệ thống đầy rẫy thông báo OOM killer đã “trảm” MySQL. Tình trạng này cực kỳ phổ biến khi anh em chạy các ứng dụng nặng trên server cấu hình thấp.
Sau 5 năm quản lý hệ thống, mình luôn thiết lập SWAP ngay khi khởi tạo server mới. Tuy tốc độ không thể sánh bằng RAM vật lý (chậm hơn khoảng 10-100 lần tùy loại ổ cứng), nhưng SWAP đóng vai trò là vùng đệm an toàn. Nó giúp hệ thống không sập bất thình lình khi traffic tăng đột biến hoặc có leak bộ nhớ xảy ra.
Lựa chọn Swap Partition hay Swap File?
Trước khi gõ lệnh, anh em cần xác định phương án triển khai phù hợp với hạ tầng hiện có.
1. Swap Partition (Phân vùng riêng)
Đây là cách chia hẳn một phân vùng ổ cứng để làm bộ nhớ đệm.
- Ưu điểm: Hiệu suất tối ưu nhất do dữ liệu được ghi tuần tự trên các block đĩa vật lý.
- Nhược điểm: Thiếu linh hoạt. Việc mở rộng dung lượng SWAP yêu cầu can thiệp vào bảng phân vùng (partition table), rất rủi ro với các server đang chạy thực tế.
2. Swap File (Tập tin SWAP)
Phương pháp này tạo một file lớn ngay trên phân vùng hiện tại để làm bộ nhớ ảo.
- Ưu điểm: Linh hoạt tuyệt đối. Bạn có thể tăng từ 2GB lên 4GB SWAP chỉ trong 30 giây mà không cần khởi động lại máy chủ.
- Nhược điểm: Hiệu suất kém hơn một chút do overhead của hệ thống tập tin. Tuy nhiên, với kỷ nguyên SSD NVMe hiện nay, sự chênh lệch này là không đáng kể.
Lời khuyên: Nếu dùng Cloud VPS như Vultr, DigitalOcean hay AWS, hãy chọn Swap File để tiết kiệm thời gian quản trị.
Quy trình triển khai Swap File chuẩn xác
Các bước dưới đây áp dụng tốt trên Ubuntu 20.04/22.04, Debian và dòng RHEL (CentOS, AlmaLinux).
Bước 1: Kiểm tra tài nguyên
Hãy xác định xem server đã có bộ nhớ ảo hay chưa bằng lệnh:
sudo swapon --show
Nếu kết quả trống, server của bạn đang chạy hoàn toàn bằng RAM vật lý. Hãy dùng thêm lệnh free -h để xem tổng dung lượng còn trống.
Bước 2: Khởi tạo file dung lượng
Để tạo 2GB SWAP, lệnh fallocate là lựa chọn nhanh nhất vì nó cấp phát không gian đĩa ngay lập tức:
sudo fallocate -l 2G /swapfile
Trong trường hợp hệ thống báo lỗi không hỗ trợ, anh em hãy dùng lệnh dd truyền thống:
sudo dd if=/dev/zero of=/swapfile bs=1024 count=2097152
Bước 3: Bảo mật file SWAP
File SWAP chứa dữ liệu tạm thời từ RAM, có thể bao gồm cả thông tin nhạy cảm. Bạn phải giới hạn quyền truy cập chỉ cho user root:
sudo chmod 600 /swapfile
Nếu bỏ qua bước này, bất kỳ user nào có quyền truy cập server cũng có thể “soi” được dữ liệu trong bộ nhớ ảo.
Bước 4: Kích hoạt hệ thống
Tiến hành định dạng và đưa file vào sử dụng:
sudo mkswap /swapfile
sudo swapon /swapfile
Gõ lại free -h, bạn sẽ thấy dòng Swap đã hiển thị con số 2.0Gi.
Bước 5: Thiết lập vĩnh viễn
Mặc định, SWAP sẽ mất sau khi reboot. Để hệ thống tự nhận diện khi khởi động, hãy thêm cấu hình vào /etc/fstab. Đầu tiên, hãy sao lưu để phòng lỗi:
sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Tối ưu tham số Swappiness
Nhiều người thắc mắc tại sao RAM vẫn còn mà Linux đã dùng SWAP gây chậm máy. Thủ phạm chính là chỉ số Swappiness (giá trị từ 0-100).
- Mặc định (60): Linux sẽ bắt đầu dùng SWAP khi RAM còn trống khoảng 40%.
- Khuyên dùng (10-20): Chỉ dùng SWAP khi RAM thực sự cạn kiệt (còn khoảng 10%).
Chỉnh ngay lập tức về 10:
sudo sysctl vm.swappiness=10
Để lưu cấu hình này, hãy thêm dòng vm.swappiness=10 vào cuối file /etc/sysctl.conf.
Kinh nghiệm thực chiến
Dưới đây là 3 quy tắc vàng mình đúc kết được:
- Công thức tính dung lượng: Với RAM dưới 2GB, hãy tạo SWAP gấp đôi (2x). Với RAM trên 4GB, chỉ cần tạo SWAP bằng dung lượng RAM (1x) là đủ.
- Cảnh báo I/O Wait: Nếu chỉ số
%watrong lệnhtopthường xuyên > 10%, nghĩa là CPU đang phải chờ ổ cứng xử lý SWAP quá nhiều. Đây là lúc bạn bắt buộc phải nâng cấp RAM vật lý thay vì cố dùng bộ nhớ ảo. - Tuổi thọ SSD: Đừng quá lo lắng về việc SWAP làm hỏng SSD. Các dòng SSD hiện đại có chỉ số TBW (Total Bytes Written) rất cao, đủ sức chịu đựng cường độ ghi của SWAP trong nhiều năm.
Cấu hình SWAP là kỹ thuật cơ bản nhưng cực kỳ quan trọng để tăng độ ổn định cho server. Chúc anh em tối ưu hệ thống thành công!

