Swap là gì? VPS ít RAM sống khỏe nhờ swap trên NVMe

Chia sẻ bài viết

Mục lục
Swap là gì? VPS ít RAM sống khỏe nhờ swap trên NVMe

Trả lời nhanh: Swap là vùng ổ đĩa được trưng dụng làm RAM dự phòng: khi RAM đầy, hệ điều hành chuyển bớt phần ít dùng xuống swap thay vì để OOM killer giết tiến trình. Đổi lại tốc độ: RAM tính bằng nano-giây, swap trên ổ tính bằng micro đến mili-giây. Trên VPS ít RAM, swap 1-2 GB là dây an toàn nên có: build Next.js, cập nhật hệ thống, đợt truy cập đột biến, những cơn khát RAM ngắn sẽ mượn swap rồi trả, thay vì sập. Và chất ổ quyết định độ đau: swap trên NVMe chậm-chấp-nhận-được, trên ổ cơ/network storage là tra tấn.

"Có nên tạo swap cho VPS không?", câu hỏi gây chia rẽ kỳ lạ: phe 'phải có' và phe 'swap là dấu hiệu nghèo RAM' đều có lý một nửa. Bài này ghép hai nửa lại: swap để làm gì, hại ở đâu, tạo thế nào cho đúng, và cách đọc tín hiệu swap để biết lúc nào là bình thường - lúc nào là chuông báo nâng cấp.

Tóm tắt nhanh
  • Swap = đệm chống sập, không phải RAM mở rộng để chạy thêm app
  • Không swap + hết RAM = OOM killer chọn nạn nhân, thường đúng database của bạn
  • Tạo 1-2 GB swapfile + swappiness=10: dùng khi cần, không lạm dụng
  • Đọc tín hiệu: swap có dùng chút ít = bình thường; si/so cày liên tục = thiếu RAM thật, nâng gói

Không swap thì chuyện gì xảy ra

RAM đầy mà có tiến trình xin thêm, kernel kích hoạt OOM killer, thuật toán chọn một tiến trình 'đáng giết nhất' để giải phóng RAM. Khẩu vị của nó thường trùng khắc nghiệt với thứ bạn quý nhất: MySQL đang ôm cả GB, tiến trình build đang chạy dở. Triệu chứng kinh điển: build 'chết không lời trăng trối', database tự dưng biến mất lúc 2h sáng, dmesg hiện dòng "Out of memory: Killed process". Swap là tấm đệm dưới vực đó: cơn khát RAM tạm thời được đỡ bằng ổ đĩa, chậm đi nhưng sống, và với đa số nghiệp vụ, chậm 30 giây ăn đứt sập 30 phút.

Tạo swap đúng bài trong 2 phút

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab   # song qua reboot
# do luong RAM he thong khat den dau roi hay dung swap:
sudo sysctl vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.d/99-swap.conf

Hai quyết định trong đó: cỡ, VPS 1-4 GB RAM lấy swap 1-2 GB là vùng hợp lý (bằng hoặc nửa RAM; to hơn chỉ kéo dài cơn hấp hối khi thiếu RAM thật); swappiness=10, bảo kernel: ưu tiên RAM đến gần cùng mới đụng swap (mặc định 60 hơi 'ham' swap cho máy chủ).

Vì sao chất ổ đổi hẳn trải nghiệm swap

Swap là đọc/ghi trang 4KB ngẫu nhiên, đúng bài kiểm tra khắc nghiệt của ổ đĩa. Cùng một cơn mượn swap: ổ NVMe với hàng trăm nghìn IOPS latency dưới trăm micro-giây xử êm, hệ chậm lại kiểu 'hơi ì', vẫn phục vụ được; ổ cơ hay network storage vài trăm-nghìn IOPS biến máy thành tượng, load tăng vọt, SSH cũng khó vào. Đây là lý do lời khuyên 'swap là tra tấn' ra đời từ thời ổ cơ, trên VPS NVMe hiện đại, swap đúng liều là công cụ hoàn toàn tử tế, đặc biệt với gói nhỏ chạy build hoặc cập nhật định kỳ.

Đọc tín hiệu: bình thường hay chuông báo

free -h            # cot Swap: used bao nhieu
vmstat 5           # cot si/so: trang swap vao/ra MOI GIAY
  • Swap used vài trăm MB, si/so ~0: bình thường tốt, kernel cất đồ nguội xuống kho, RAM dành cho việc nóng. Đừng hoảng, đừng swapoff.
  • si/so nhảy liên tục hàng nghìn: thrashing, hệ đang cày ổ để sống qua từng giây. Đây là thiếu RAM thật: tìm tiến trình phàm ăn (htop, sort theo RES), hoặc đến giờ nâng gói RAM, swap đã làm xong vai trò báo động của nó.
  • Build/tác vụ đêm mượn swap rồi trả: đúng thiết kế, dây an toàn hoạt động.

Tạo vùng nhớ tạm đúng cách, hai phút

# 1. Kiem da co chua
swapon --show
free -h

# 2. Tao tep 4 GB (dieu chinh theo RAM cua may)
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

# 3. Giu lai sau khi khoi dong lai
echo '/swapfile none swap sw 0 0' >> /etc/fstab

# 4. Chinh muc do he thong san sang dung no
#    Voi may chu: 10 la hop ly, chi dung khi that su can
sysctl vm.swappiness=10
echo 'vm.swappiness=10' >> /etc/sysctl.conf

# 5. Kiem lai
free -h && cat /proc/sys/vm/swappiness
Bộ nhớ của máyVùng nhớ tạm nên đặtGhi chú
1 GB2 GBBắt buộc phải có
2 GB2 tới 4 GBRất nên có
4 GB2 tới 4 GBNên có
8 GB trở lên2 GBChủ yếu để chống bị dừng tiến trình đột ngột

Bảng phân biệt tín hiệu bình thường và báo động

Bạn thấyNghĩa làNên làm
Vùng nhớ tạm dùng vài trăm MB, ổn địnhBình thường, hệ thống đẩy phần ít dùng raKhông phải làm gì
Dùng tăng dần và không giảmBộ nhớ thật đang thiếuThêm RAM, hoặc giảm số tiến trình
Máy chậm hẳn, cột tráo trang trong vmstat khác 0 liên tụcĐang tráo trang liên tục, đây là tình trạng tệ nhấtThêm RAM ngay, vùng nhớ tạm không cứu được
Không có vùng nhớ tạm, thỉnh thoảng tiến trình bị dừngHệ thống hết bộ nhớ và phải giết tiến trìnhTạo vùng nhớ tạm ngay
# Theo doi lien tuc, cot si va so trong vmstat la tin hieu quan trong nhat
vmstat 2 30

# Xem tien trinh nao dung vung nho tam nhieu nhat
for f in /proc/*/status; do
  awk '/^Name|^VmSwap/{printf "%s ", $2} END{print ""}' "$f"
done | sort -k2 -hr | head -10

Điều cần nói rõ: vùng nhớ tạm là lưới an toàn chứ không phải cách thay cho bộ nhớ thật. Nó cứu bạn khỏi việc tiến trình bị giết đột ngột trong đợt cao điểm ngắn. Nếu máy dùng nó liên tục thì câu trả lời đúng là thêm bộ nhớ, và ổ NVMe chỉ làm tình trạng đó bớt đau chứ không chữa khỏi.

Câu hỏi thường gặp

VPS RAM lớn (8-16 GB) có cần swap không?

Vẫn nên có 1-2 GB làm lưới cuối: một tiến trình leak RAM lúc nửa đêm sẽ chậm-mà-sống thay vì OOM killer xử đẹp database. Chi phí gần bằng không, bảo hiểm thì thật.

Swap có làm mòn ổ NVMe không?

Về lý thuyết ghi swap tính vào tuổi thọ ổ; thực tế mức swap của VPS bình thường quá nhỏ so với sức chịu ghi của NVMe enterprise (DWPD cao). Không phải mối lo thực tế, thrashing kéo dài mới là thứ cần xử, vì lý do hiệu năng chứ chưa tới lý do tuổi thọ.

zram/zswap là gì, có nên dùng thay swapfile?

Nén RAM làm swap trong chính RAM, hay cho máy desktop/RAM cực hẹp. Trên VPS có NVMe, swapfile truyền thống đơn giản và dễ đoán hơn; zram là tối ưu tầng hai khi bạn đã hiểu rõ tải của mình.

Docker/K8s bảo tắt swap thì sao?

Kubernetes có yêu cầu riêng về quản RAM nên khuyến cáo tắt, đúng trong ngữ cảnh đó. VPS đơn chạy app/database/Docker thường: swap nhỏ + swappiness thấp vẫn là khuyến nghị hợp lý.

Hạ tầng NVMe Enterprise của TND
VPS ổ Enterprise U.2 NVMe, CPU xung cao, đặt tại Việt Nam
Swap chỉ tử tế khi ổ bên dưới tử tế: trên TND VPS NVMe, dây an toàn của bạn nằm trên Enterprise U.2 NVMe RAID 10, cơn mượn RAM ngắn trôi qua êm ru thay vì đứng hình. Gói nhỏ 129k thêm 2 GB swap là build được dự án thật; lớn dần thì nâng RAM giữ nguyên máy. Bàn giao 5 phút.
Xem VPS ổ Enterprise U.2 NVMe tại Việt Nam

Bài viết liên quan