Swap là vùng lưu trữ mà Linux có thể dùng như phần mở rộng của bộ nhớ ảo khi cần đẩy một số page ra khỏi RAM. Trên VPS nhỏ, swap có thể giúp hệ thống tránh bị OOM kill ngay lập tức khi có đỉnh tải ngắn; nhưng swap không biến ổ đĩa thành RAM và không thể chữa một ứng dụng rò rỉ bộ nhớ hoặc cấu hình worker quá lớn.
Bài viết này giải thích khi nào nên tạo swap, cách ước lượng dung lượng theo workload, cách tạo swapfile trên Ubuntu, kiểm tra swapon, lưu cấu hình qua /etc/fstab và theo dõi vmstat. Phần quan trọng nhất là biết giới hạn: swap quá nhiều có thể che giấu thiếu RAM, gây latency và làm disk I/O tăng mạnh.
1. Swap trên VPS là gì và dùng để làm gì?
RAM chứa các page đang được process sử dụng tích cực. Khi kernel chịu áp lực bộ nhớ, một phần page ít được truy cập có thể được đưa ra vùng swap để giải phóng RAM cho page nóng hơn. Swap có thể là partition hoặc file. Trên VPS cloud, swapfile thường linh hoạt hơn vì không cần repartition disk, nhưng cần kiểm tra filesystem và policy của nhà cung cấp.
swap nên được xem là lớp an toàn cho burst workload, không phải mục tiêu để hệ thống dùng liên tục. Nếu máy thường xuyên swap-in/swap-out, hãy kiểm tra memory leak, số worker PHP-FPM, cache, database buffer và giới hạn container trước khi chỉ tăng kích thước swap.
swapon dùng để bật device hoặc file cho paging và swapping; các swap area thường được khai báo trong /etc/fstab để được kích hoạt khi boot.Tóm lược từ swapon(8) manual.[3]
2. Khi nào VPS nên có swap?
Một VPS nhỏ chạy web server, queue worker, Composer hoặc build frontend thường hưởng lợi từ một swapfile có kích thước vừa phải. Các tác vụ cài package hoặc biên dịch có thể tạo đỉnh memory ngắn; swap giúp giảm khả năng process bị kill đột ngột, nhưng đổi lại tốc độ sẽ chậm nếu dữ liệu thực sự bị đẩy ra disk.
- Nên cân nhắc swap khi máy có RAM nhỏ, workload có burst hoặc cần chạy tác vụ build/migration ngoài giờ cao điểm.
- Không nên dùng swap như lý do để tăng số worker vô hạn hoặc trì hoãn việc nâng RAM khi máy swap liên tục.
- Không có một công thức kích thước đúng cho mọi VPS; cần dựa trên RAM, workload, disk type, cgroup limit và yêu cầu latency.
- Nếu nhà cung cấp đã cấp swap hoặc dùng zram, kiểm tra hiện trạng trước khi tạo thêm swapfile.
Trước khi tạo, xem RAM và swap hiện tại. Lệnh free cho cái nhìn tổng quát, swapon --show cho từng swap area, còn /proc/swaps là nguồn kiểm tra kernel đang nhận diện gì.
free -h
swapon --show
cat /proc/swaps
vmstat 1 5
sysctl vm.swappiness3. Chọn kích thước swap theo workload, không theo công thức máy móc
Với VPS 1 GB RAM chạy web nhỏ, 1–2 GB swap có thể là điểm khởi đầu thực dụng; VPS 2–4 GB có thể bắt đầu với 1–2 GB nếu cần buffer cho deploy hoặc worker. Đây chỉ là ví dụ vận hành, không phải chuẩn bắt buộc. Workload database, build lớn, xử lý ảnh hoặc JVM cần benchmark và giới hạn memory riêng.
Một quy tắc an toàn là đo peak memory trong các tác vụ thật: deploy, composer install, migration, queue burst và backup. Nếu swap usage tăng đều trong giờ bình thường, đừng chỉ tăng swap; hãy tìm process đứng đầu RSS, kiểm tra OOM log và điều chỉnh workload.
ps -eo pid,user,comm,%mem,rss --sort=-rss | head -20
sudo journalctl -k -b | grep -i -E 'oom|out of memory|killed process' || true
free -h
vmstat 1 104. Kiểm tra filesystem trước khi tạo swapfile
Swapfile cần được kernel truy cập trực tiếp. Manual swapon cảnh báo file có holes hoặc file trên filesystem copy-on-write như Btrfs có thể bị từ chối. Vì vậy, không nên copy một file sparse từ nơi khác rồi chạy swapon; hãy tạo file theo cách phù hợp với filesystem của VPS và kiểm tra kết quả.
findmnt -no TARGET,FSTYPE,OPTIONS /
df -h /
stat -f -c '%T' /
lsattr /swapfile 2>/dev/null || trueTrên ext4 hoặc XFS, phương pháp tạo swapfile phổ biến có thể dùng fallocate nếu file không trở thành sparse theo cách bị kernel từ chối; phương án portable hơn theo mkswap manual là tạo file bằng dd. Luôn kiểm tra quyền file là 0600 và chạy mkswap trước khi swapon.
5. Tạo swapfile an toàn bằng dd
Ví dụ sau tạo swapfile 2 GiB ở root filesystem. Hãy thay count theo kích thước đã tính và đảm bảo filesystem còn đủ dung lượng. Dùng sudo, kiểm tra file trước khi khởi tạo, không chạy lại mkswap trên một file đang được dùng nếu chưa hiểu tác động.
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
swapon --show
free -hmkswap thiết lập vùng swap trên file hoặc device; sau đó swapon mới bắt đầu sử dụng. Manual mkswap cảnh báo tham số blocks cũ có thể gây nguy hiểm nếu gõ nhầm, vì vậy nên để công cụ dùng toàn bộ file hoặc dùng cú pháp --file/--size phù hợp với phiên bản util-linux.[4]
6. Phương án fallocate và cách xác minh
Một số hướng dẫn dùng fallocate vì nhanh hơn dd. Cách này có thể phù hợp trên filesystem hỗ trợ preallocation đúng cách, nhưng không được coi là luôn portable. Nếu swapon báo file có holes hoặc invalid argument, không cố ép bằng chmod; hãy kiểm tra filesystem, tạo lại file bằng dd và đọc đúng cảnh báo của swapon.
sudo rm -f /swapfile
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
swapon --show --bytesĐừng dùng cả hai quy trình trên cùng một file trong một lần cài đặt. Hãy chọn một phương án, xác minh swapon thành công và ghi lại filesystem cùng phiên bản util-linux. Trên Btrfs hoặc môi trường có COW, cần tuân thủ hướng dẫn riêng của filesystem thay vì sao chép nguyên lệnh ext4.
7. Bật swap tự động sau reboot bằng fstab
swapon --all đọc các entry có filesystem type là swap trong /etc/fstab. Với swapfile, source phải là đường dẫn tuyệt đối; target convention là none; tùy chọn thường là sw. Trước khi sửa fstab, sao lưu và kiểm tra syntax để tránh làm hệ thống boot chậm hoặc báo lỗi mount.
sudo cp -a /etc/fstab /etc/fstab.bak.$(date +%Y%m%d-%H%M%S)
printf '/swapfile none swap sw 0 0\n' | sudo tee -a /etc/fstab
sudo swapoff /swapfile
sudo swapon -a
swapon --show
findmnt --verifyNếu entry đã tồn tại, không append thêm một dòng trùng. Dùng grep kiểm tra trước, rồi chạy swapoff/swapon có chủ đích. Theo manual swapon, các option nofail, pri và discard có ý nghĩa riêng; đừng thêm chúng chỉ vì thấy trong một snippet trên mạng.
8. Kiểm tra sau khi bật swap
Kiểm tra thành công không chỉ là free -h có dòng Swap. Hãy xác nhận swap area, tổng memory, hoạt động paging và log kernel. vmstat hiển thị si/so, tức swap-in/swap-out; nếu hai cột tăng liên tục trong workload bình thường, máy đang chịu memory pressure thực sự.
free -h
swapon --show --output=NAME,TYPE,SIZE,USED,PRIO
cat /proc/swaps
vmstat 1 10
sudo journalctl -k -b --no-pager | grep -i swap || trueHãy đo trước và sau khi tạo swap trong cùng một tác vụ: deploy, restart worker hoặc chạy queue burst. Một swapfile mới có USED bằng 0 là bình thường; nó không có nghĩa cấu hình sai. Ngược lại, USED tăng nhanh kèm load cao và I/O wait là tín hiệu cần giảm tải hoặc nâng RAM.
9. vm.swappiness nên hiểu như thế nào?
vm.swappiness là tham số kernel ảnh hưởng xu hướng sử dụng swap, nhưng không phải công tắc tắt/bật swap. Giá trị phù hợp phụ thuộc workload, kernel, storage và mức độ nhạy latency. Đừng đặt về 0 theo thói quen nếu chưa đo; cũng đừng nghĩ giá trị thấp sẽ giải quyết được memory leak.
sysctl vm.swappiness
sudo sysctl -w vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-vps-memory.conf
sudo sysctl --system
sysctl vm.swappinessThử thay đổi trong một cửa sổ có giám sát, ghi lại baseline free, vmstat, load average và latency ứng dụng. Nếu thay đổi làm giảm swap nhưng tăng OOM kill hoặc request latency, hãy rollback giá trị và xử lý nguyên nhân ở process level.
10. Cách tắt, tăng hoặc thay thế swapfile
Để tắt swapfile đang dùng, trước tiên kiểm tra USED. swapoff có thể thất bại nếu hệ thống không đủ RAM để đưa các page đang swap trở lại bộ nhớ; manual swapon nêu rõ trường hợp này có thể trả lỗi do insufficient memory. Vì vậy, không xóa file ngay sau khi chạy swapoff mà chưa xác minh.
swapon --show
sudo swapoff /swapfile
swapon --show
sudo sed -i '\|^/swapfile |d' /etc/fstab
sudo rm -f /swapfile
sudo df -h /Nếu muốn tăng kích thước, tạo swapfile mới hoặc resize theo quy trình có downtime/risk phù hợp; không dùng truncate trên swapfile đang hoạt động. Với máy production, lên kế hoạch ngoài giờ cao điểm, xác nhận console access và có phương án rollback nếu swapoff không hoàn tất.
11. Swap không thay thế giới hạn process và monitoring
Laravel queue, PHP-FPM, Node.js, MySQL và Docker đều có thể tiêu thụ memory theo cách khác nhau. Tạo swap không thay thế việc đặt worker count, memory_limit, container limit, max_children hoặc connection pool hợp lý. Nếu một deploy Composer làm máy hết RAM, hãy giảm concurrency hoặc tăng tài nguyên thay vì chỉ thêm nhiều swap.
Bài PHP-FPM pool và tối ưu worker liên quan trực tiếp đến cách tránh tạo quá nhiều process. Khi điều tra disk hoặc memory trên VPS, hãy kết hợp quy trình xử lý Linux disk full để chắc chắn swapfile không vô tình làm filesystem đầy.
12. Checklist cấu hình swap trên VPS
- Kiểm tra free -h, swapon --show, /proc/swaps và vmstat trước khi tạo.
- Xác định filesystem, disk type và policy của nhà cung cấp VPS.
- Chọn kích thước theo peak workload, không dùng công thức cố định cho mọi máy.
- Tạo swapfile bằng phương án phù hợp; chmod 600 trước khi mkswap và swapon.
- Xác minh swapon --show, free -h và vmstat sau khi bật.
- Thêm đúng một entry vào /etc/fstab, backup file và chạy findmnt --verify.
- Theo dõi si/so, I/O wait, OOM log và latency thay vì chỉ nhìn swap USED.
- Khi tăng hoặc xóa swap, kiểm tra USED và bảo đảm hệ thống đủ RAM để swapoff.
13. Kết luận
Swap là một van an toàn hữu ích cho VPS có đỉnh tải ngắn, nhưng nó đi kèm chi phí I/O và latency. Quy trình đúng là đo hiện trạng, chọn kích thước theo workload, tạo swapfile đúng yêu cầu filesystem, bật qua swapon, lưu trong fstab và theo dõi vmstat. Khi swap hoạt động thường xuyên, nguyên nhân gốc gần như luôn nằm ở memory pressure hoặc giới hạn process cần được xử lý.
Hãy coi swap là một phần của runbook vận hành, không phải lệnh cài một lần rồi quên. Ghi lại kích thước, filesystem, swappiness, ngưỡng cảnh báo và phương án nâng RAM. Cách này giúp VPS phục hồi có kiểm soát thay vì âm thầm chậm dần cho tới khi website timeout.