❤️ AZDIGI chính thức cập nhật hệ thống blog mới hoàn chỉnh. Tuy nhiên có thể một số bài viết bị sai lệch hình ảnh, hãy ấn nút Báo cáo bài viết ở cuối bài để AZDIGI cập nhật trong thời gian nhanh nhất. Chân thành cám ơn.
VPS hết RAM? Server chạy chậm? Nhiều khi swap file có thể giải quyết tình huống khó khăn này mà không cần phải nâng cấp lên gói VPS có nhiều RAM hơn. Bài viết hướng dẫn chi tiết cách tạo và tối ưu swap trên VPS Linux để server chạy ổn định hơn.
Swap là gì?

Swap chính là “RAM ảo” được tạo trên ổ cứng. Khi RAM vật lý đầy, hệ thống sẽ chuyển các tiến trình ít dùng từ RAM xuống swap để giải phóng bộ nhớ cho những ứng dụng đang hoạt động.
Nôm na là khi server bạn hết chỗ trong RAM, nó sẽ “mượn” thêm chút không gian từ ổ cứng để lưu tạm các dữ liệu ít quan trọng.
ℹ️ Tốc độ đọc ghi của swap chậm hơn RAM rất nhiều (đặc biệt với HDD), nhưng ít nhất server không bị crash vì hết bộ nhớ.
Khi nào VPS cần swap?

VPS RAM thấp (dưới 2GB)
VPS có RAM 512MB, 1GB rất dễ hết bộ nhớ. Chỉ cần vài ứng dụng web chạy đồng thời là RAM đã cạn. Swap giúp server không bị kill process đột ngột.
Chạy nhiều service cùng lúc
Nginx + MySQL + PHP-FPM + Redis có thể “ngốn” hết RAM của VPS nhỏ. Thêm swap giúp hệ thống có thêm buffer để xử lý tải cao tạm thời.
Phòng tránh OOM (Out of Memory)
OOM killer sẽ tự động tắt các tiến trình khi hết RAM. Điều này có thể làm crash website hoặc database. Swap cho server thêm thời gian để xử lý tình huống căng thẳng.
💡 Ví dụ thực tế: VPS chạy WordPress với 1GB RAM, khi có traffic tăng đột biến, swap giúp server không crash mà chỉ chạy chậm tạm thời.
Kiểm tra swap hiện tại

Trước khi tạo swap mới, check xem server đã có swap chưa:
# Xem tổng quan RAM và swap
free -h
Output mẫu:
total used free shared buff/cache available
Mem: 1.9Gi 890Mi 123Mi 45Mi 943Mi 876Mi
Swap: 0B 0B 0B
Dòng Swap: 0B nghĩa là chưa có swap nào.
# Xem chi tiết swap devices
swapon --show
Nếu không có output gì, nghĩa là chưa có swap.
# Cách khác để check
cat /proc/swaps
Output sẽ trống nếu chưa có swap được kích hoạt.
Tạo swap file bằng fallocate
Cách hiện đại nhất là dùng fallocate để tạo swap file. Nhanh hơn và hiệu quả hơn dd.
Bước 1: Tạo file swap
# Tạo file swap 2GB (thay đổi size theo nhu cầu)
sudo fallocate -l 2G /swapfile
# Nếu fallocate không hoạt động, dùng dd
# sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
Bước 2: Phân quyền bảo mật
# Chỉ root mới đọc được file swap
sudo chmod 600 /swapfile
# Kiểm tra phân quyền
ls -lh /swapfile
Output sẽ hiện: -rw------- 1 root root 2.0G
Bước 3: Định dạng file swap
# Biến file thông thường thành swap
sudo mkswap /swapfile
Bước 4: Kích hoạt swap
# Bật swap ngay lập tức
sudo swapon /swapfile
# Kiểm tra kết quả
free -h
Bây giờ dòng Swap sẽ hiện 2.0Gi thay vì 0B.
Bước 5: Tự động mount khi reboot
Để swap tự động hoạt động sau khi reboot:
# Backup file fstab trước
sudo cp /etc/fstab /etc/fstab.backup
# Thêm dòng swap vào fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Kiểm tra file fstab:
cat /etc/fstab
Dòng cuối sẽ có: /swapfile none swap sw 0 0
Bao nhiêu swap là đủ?
Quy tắc cơ bản
- RAM ≤ 2GB: Swap = RAM (1GB RAM → 1GB swap)
- RAM > 2GB: Swap = 1-2GB (đủ cho emergency)
Ví dụ cụ thể
- VPS 512MB RAM → 512MB swap
- VPS 1GB RAM → 1GB swap
- VPS 2GB RAM → 1-2GB swap
- VPS 4GB RAM → 1-2GB swap (không cần nhiều hơn)
Lý do: VPS có RAM lớn hiếm khi cần swap nhiều. Nếu app cần hơn 4GB RAM thì nên nâng cấp RAM thay vì dựa vào swap chậm.
Trường hợp đặc biệt
VPS chạy database lớn có thể cần swap cao hơn. MySQL với InnoDB buffer pool lớn đôi khi benefit từ swap 4-8GB.
Tối ưu swap performance
vm.swappiness
Tham số này quyết định hệ thống “thích” dùng swap hay RAM. Giá trị từ 0-100:
- 60 (mặc định): Cân bằng, dùng cả RAM và swap
- 10 (khuyến nghị server): Ưu tiên RAM, chỉ dùng swap khi thực sự cần
- 1: Gần như không dùng swap trừ khi RAM cực kỳ thấp
# Xem giá trị hiện tại
cat /proc/sys/vm/swappiness
# Đặt tạm thời (mất sau khi reboot)
sudo sysctl vm.swappiness=10
vm.vfs_cache_pressure
Điều khiển kernel “trọng” cache hay metadata hơn:
- 100 (mặc định): Cân bằng giữa cache và metadata
- 50 (khuyến nghị): Ưu tiên giữ cache lâu hơn, tốt cho server
# Xem giá trị hiện tại
cat /proc/sys/vm/vfs_cache_pressure
# Đặt tạm thời
sudo sysctl vm.vfs_cache_pressure=50
Cài đặt permanent
Để các tham số này tự động load khi reboot:
# Sửa file sysctl.conf
sudo nano /etc/sysctl.conf
Thêm 2 dòng này vào cuối file:
vm.swappiness=10
vm.vfs_cache_pressure=50
Reload config:
sudo sysctl -p
Kiểm tra:
sudo sysctl vm.swappiness vm.vfs_cache_pressure
Swap file vs Swap partition
Swap file (khuyến nghị)
Ưu điểm:
- Dễ tạo và xoá
- Resize linh hoạt
- Không cần chia lại ổ cứng
- Backup dễ dàng
Nhược điểm:
- Chậm hơn swap partition một chút
- Phụ thuộc vào filesystem
Swap partition
Ưu điểm:
- Nhanh hơn swap file chút ít
- Không phụ thuộc filesystem
Nhược điểm:
- Phải chia lại ổ cứng
- Resize rất phức tạp
- Không flexible
💡 Với VPS, swap file là lựa chọn tốt hơn vì dễ quản lý và hiệu năng chênh lệch không đáng kể.
Khi KHÔNG nên dùng swap nhiều
Giảm tuổi thọ ổ cứng
Swap ghi/đọc liên tục có thể làm ổ cứng hao mòn nhanh hơn. Nếu server liên tục swap heavy, nên nâng cấp RAM thay vì dựa vào swap. Nếu bạn dùng Dedicated server cần cân nhắc về sức khoẻ ổ cứng.
Swap thrashing
Hiện tượng server liên tục chuyển data giữa RAM và swap. Dấu hiệu:
- Load average cao
- I/O wait cao
- Server phản hồi cực chậm
Cách check swap thrashing:
# Xem swap usage theo thời gian thực
watch -n 1 'free -h'
# Xem I/O wait
iostat -x 1
⚠️ Nếu thấy swap usage tăng giảm liên tục và I/O wait >20%, server đang swap thrashing. Lúc này cần thêm RAM thay vì tăng swap.
Database servers
MySQL, PostgreSQL không nên swap nhiều. Database cần RAM thật để cache hiệu quả. Nếu database liên tục swap, performance sẽ giảm nghiêm trọng.
Setting cho database server:
vm.swappiness=1
Xoá và resize swap file
Tắt swap
# Tắt swap
sudo swapoff /swapfile
# Xác nhận đã tắt
free -h
Xoá swap file
# Xoá file swap
sudo rm /swapfile
# Xoá dòng swap trong fstab
sudo nano /etc/fstab
# Xoá dòng: /swapfile none swap sw 0 0
Resize swap file
# Tắt swap hiện tại
sudo swapoff /swapfile
# Resize file (ví dụ thành 4GB)
sudo fallocate -l 4G /swapfile
# Format lại
sudo mkswap /swapfile
# Bật lại
sudo swapon /swapfile
# Kiểm tra
free -h
Giám sát swap usage
# Xem swap usage
free -h
# Xem top process dùng swap nhiều nhất
sudo awk '/VmSwap/ && $2 > 0 {print FILENAME " " $2}' /proc/*/status | sort -k2 -nr | head -10
# Xem swap usage theo %
awk '/SwapTotal/ {total=$2} /SwapFree/ {free=$2} END {used=total-free; print "Swap usage: " used/total*100 "%"}' /proc/meminfo
Cài đặt alert
Script bash đơn giản để check swap usage:
#!/bin/bash
# File: /home/scripts/check-swap.sh
SWAP_USED=$(awk '/SwapTotal/ {total=$2} /SwapFree/ {free=$2} END {if(total>0) print (total-free)/total*100; else print 0}' /proc/meminfo)
THRESHOLD=80
if (( $(echo "$SWAP_USED > $THRESHOLD" | bc -l) )); then
echo "CẢNH BÁO: Swap usage $SWAP_USED% > $THRESHOLD%"
# Gửi email hoặc Telegram alert ở đây
fi
Lời kết
Swap là công cụ hữu ích cho VPS RAM thấp, nhưng không phải giải pháp vĩnh viễn. Nếu server liên tục cần swap, hãy nâng cấp RAM.
Cài đặt lý tưởng cho server:
- Swap size = 1-2GB (hoặc bằng RAM nếu RAM ≤ 2GB)
- vm.swappiness = 10
- vm.vfs_cache_pressure = 50
Bạn đang cần VPS hiệu năng cao với RAM đủ lớn? AZDIGI cung cấp VPS SSD NVMe với RAM từ 2GB đến 32GB, giúp server chạy mượt mà mà không cần lo swap. Tư vấn miễn phí 24/7!
Tạo swap file bằng fallocate hay dd?
Dùng fallocate nhanh hơn và hiện đại hơn. Chỉ dùng dd nếu fallocate không hoạt động trên filesystem đặc biệt.
VPS 4GB RAM có cần swap không?
Nên tạo swap 1-2GB để phòng trường hợp khẩn cấp, nhưng trong điều kiện normal không nên dùng đến swap.
Swap trên SSD có hại không?
Swap usage thấp (dưới 20%) thì không ảnh hưởng nhiều. Swap liên tục >50% sẽ làm SSD hao mòn nhanh.
vm.swappiness nên đặt bao nhiêu?
Server thông thường: 10. Database server: 1. Desktop: giữ mặc định 60.
Swap file có thể đặt ở đâu khác ngoài / không?
Có thể đặt ở bất kỳ partition nào có đủ dung lượng như /var, /home. Nhưng tránh đặt trên partition mà applications đang ghi nhiều dữ liệu để tránh I/O contention.
Có thể bạn cần xem thêm
- VPS tự khởi động lại hoặc bị treo: Nguyên nhân và cách xử lý
- Quản lý disk trên Linux VPS - kiểm tra dung lượng, mount, lsblk, fdisk và mở rộng ổ đĩa
- VPS đầy ổ cứng: Cách tìm và dọn dẹp dung lượng
- WordPress trên VPS chạy chậm: Hướng dẫn tối ưu toàn diện
- Hướng dẫn kích hoạt Swap trên Linux
- Load Average cao trên Linux Server: Chẩn đoán và xử lý
Về tác giả
Trần Thắng
Chuyên gia tại AZDIGI với nhiều năm kinh nghiệm trong lĩnh vực web hosting và quản trị hệ thống.