Nếu bạn vừa chuyển sang dùng VPS, đặc biệt là các gói cấu hình thấp 1GB hay 2GB RAM, bạn có thể đã gặp kịch bản này: website WordPress, ứng dụng hoặc cơ sở dữ liệu MySQL của bạn bỗng dưng "sập" mà không có cảnh báo. Bạn kiểm tra log và thấy một thông báo lỗi "Out of Memory" (Hết bộ nhớ). Đây là một vấn đề cực kỳ phổ biến.
Một trong những giải pháp hiệu quả, ít tốn kém nhất để xử lý vấn đề này chính là "tạo Swap". Vậy thiết lập Swap trên VPS là gì và làm thế nào để thực hiện đúng cách? Bài viết này sẽ hướng dẫn bạn từ A-Z.
Một cách dễ hiểu nhất, Swap (bộ nhớ hoán đổi) là một không gian trên ổ cứng (HDD hoặc SSD) của VPS mà hệ điều hành Linux sử dụng như một "RAM dự phòng".
Hãy tưởng tượng RAM vật lý là bàn làm việc của bạn. Bạn đặt các tài liệu đang cần xử lý gấp lên đó. Bàn làm việc (RAM) rất nhanh, nhưng có giới hạn.
Khi bàn làm việc đầy, thay vì vứt bớt tài liệu (gây sập ứng dụng), hệ thống sẽ dùng Swap. Swap giống như một cái tủ đựng hồ sơ đặt ngay cạnh bàn. Hệ thống sẽ di chuyển những tài liệu ít dùng đến (từ RAM) vào tủ hồ sơ (Swap) để giải phóng không gian trên bàn làm việc (RAM) cho các tác vụ quan trọng hơn.
Quá trình di chuyển này (vào/ra ổ cứng) chậm hơn RAM thật, nhưng việc này đảm bảo hệ thống không bị "treo" hoặc tự động "giết" các ứng dụng quan trọng khi RAM bị đầy đột ngột. Đó là lý do chủ đề thiết lập Swap trên VPS là gì lại quan trọng đến vậy.
Nhiều người nghĩ rằng VPS hiện đại dùng ổ cứng SSD siêu nhanh thì không cần Swap. Đây là một hiểu lầm. Swap không chỉ để mở rộng bộ nhớ, mà còn là một "chính sách bảo hiểm" cho sự ổn định.
Lý do chính VPS của bạn cần Swap là để chống lại OOM Killer.
OOM Killer (Out-of-Memory Killer) là gì? Đây là một cơ chế của Linux. Khi hệ thống hết sạch RAM vật lý, OOM Killer sẽ được kích hoạt. Giống như một người quản lý "hắc ám", nó sẽ quét qua danh sách các ứng dụng, tìm ứng dụng "ngốn" RAM nhất (thường là MySQL, Apache, PHP-FPM - tức là website của bạn) và "giết" (kill) tiến trình đó ngay lập Htức để cứu cả hệ thống.
Hậu quả: VPS của bạn vẫn chạy, nhưng website hoặc database thì đã "sập".
Thiết lập Swap trên VPS tạo ra một "vùng đệm an toàn". Khi RAM bắt đầu cạn, hệ thống sẽ di chuyển các dữ liệu ít quan trọng (như các tiến trình nền) vào Swap trước. Điều này giải phóng RAM cho ứng dụng chính, ngăn chặn OOM Killer kích hoạt.
Đối với VPS 1GB hoặc 2GB RAM, việc này là cực kỳ cần thiết. Các tác vụ như backup, cài đặt phần mềm, hoặc lượng truy cập tăng đột biến có thể dễ dàng làm cạn kiệt RAM trong giây lát. Không có Swap, VPS của bạn chắc chắn sẽ sập.
Quan niệm cũ cho rằng dung lượng Swap nên bằng gấp đôi dung lượng RAM (Swap = 2x RAM) đã không còn chính xác với các hệ thống máy chủ hiện đại. Việc tạo Swap quá lớn vừa lãng phí dung lượng ổ cứng SSD, vừa không cần thiết.
Các khuyến nghị cập nhật từ những nhà cung cấp hệ điều hành lớn như Red Hat và Ubuntu tập trung vào khối lượng công việc và dung lượng RAM hiện có.
Công thức chung được chấp nhận rộng rãi cho máy chủ như sau:
Nếu RAM của bạn dưới 2 GB (ví dụ 1 GB), bạn nên tạo dung lượng Swap gấp 2 lần RAM (ví dụ: RAM 1GB thì tạo Swap 2GB).
Nếu RAM của bạn từ 2 GB đến 8 GB (ví dụ 4 GB), bạn nên tạo dung lượng Swap bằng đúng dung lượng RAM (ví dụ: RAM 4GB thì tạo Swap 4GB).
Nếu RAM của bạn từ 8 GB đến 64 GB, bạn chỉ cần tạo Swap tối thiểu 4 GB (hoặc 8 GB cho chắc chắn) là đủ.
Nếu RAM trên 64 GB, bạn cũng chỉ cần tạo Swap tối thiểu 4 GB, hoặc thậm chí không cần thiết nếu bạn chắc chắn về khối lượng công việc của mình.
Khuyến nghị thực tế cho 99% người dùng VPS:
VPS 1GB RAM: Tạo 2GB Swap.
VPS 2GB RAM: Tạo 2GB hoặc 4GB Swap.
VPS 4GB RAM: Tạo 4GB Swap.
Đây là mức dung lượng hợp lý, vừa đủ để hệ thống hoạt động ổn định mà không lãng phí tài nguyên ổ cứng quý giá của bạn.
Có hai cách để thiết lập Swap trên VPS: dùng Swap Partition (phân vùng Swap) hoặc Swap File (tập tin Swap).
Swap Partition: Cách cũ, bạn phải phân vùng ổ cứng từ đầu. Rất cứng nhắc và khó thay đổi.
Swap File: Cách hiện đại. Bạn tạo một tập tin trên hệ thống và "bảo" Linux dùng tập tin đó làm Swap. Cách này cực kỳ linh hoạt, cho phép bạn tạo/xóa/thay đổi dung lượng Swap bất cứ lúc nào.
Bài viết này sẽ hướng dẫn bạn cách tạo Swap File, phương pháp được khuyến nghị cho mọi VPS. Hướng dẫn này hoạt động tốt trên các hệ điều hành phổ biến như Ubuntu (20.04, 22.04) và CentOS.
Chúng ta sẽ thực hiện 5 bước.
Trước khi tạo mới, hãy kiểm tra xem VPS của bạn đã có Swap hay chưa. Gõ lệnh sau vào terminal:
Bash
sudo swapon -s
Nếu lệnh này không trả về kết quả gì (hoặc chỉ trả về tiêu đề), nghĩa là VPS của bạn chưa có Swap.
Bạn cũng có thể dùng lệnh free -m (kiểm tra bằng Megabytes):
Bash
free -m
Nếu dòng Swap: hiển thị toàn số 0, bạn cần phải tạo Swap.
Bash
total used free shared buff/cache available
Mem: 983 181 136 1 665 653
Swap: 0 0 0
Bây giờ, chúng ta sẽ tạo một tập tin trống để làm Swap. Chúng ta sẽ dùng lệnh fallocate, đây là cách nhanh nhất để tạo một file với dung lượng định trước.
Trong ví dụ này, tôi sẽ tạo một file Swap dung lượng 4GB. Bạn có thể thay đổi số 4G thành 2G (2GB) hoặc 8G (8GB) tùy theo nhu cầu.
Bash
sudo fallocate -l 4G /swapfile
Lệnh này tạo một file tên là /swapfile (nằm ở thư mục gốc) với dung lượng 4GB.
Bạn có thể kiểm tra lại bằng lệnh ls -lh:
Bash
ls -lh /swapfile
Kết quả: -rw-r--r-- 1 root root 4.0G Nov 11 09:29 /swapfile
Đây là bước cực kỳ quan trọng về bảo mật mà nhiều người mới bỏ qua.
Swap file sẽ chứa dữ liệu (có thể nhạy cảm) từ RAM. Bạn phải đảm bảo rằng chỉ người dùng root (quản trị cao nhất) mới có quyền đọc/ghi file này.
Hãy dùng lệnh chmod 600 để cấp quyền chính xác:
Bash
sudo chmod 600 /swapfile
Lệnh này có nghĩa là chỉ chủ sở hữu (root) mới được Đọc (Read) và Ghi (Write). Mọi người dùng khác không có bất kỳ quyền nào.
Bây giờ, file đã sẵn sàng, chúng ta cần "bảo" cho Linux biết đây là một file Swap bằng lệnh mkswap (make swap):
Bash
sudo mkswap /swapfile
Hệ thống sẽ trả về một thông báo, cho biết đã thiết lập swapspace thành công.
Cuối cùng, kích hoạt file Swap đó để hệ thống bắt đầu sử dụng:
Bash
sudo swapon /swapfile
Bây giờ, bạn có thể kiểm tra lại bằng lệnh ở Bước 1:
Bash
sudo swapon -s
Bạn sẽ thấy file /swapfile đã xuất hiện: Filename Type Size Used Priority /swapfile file 4194300 0 -2
Hoặc dùng free -m:
Bash
free -m
Dòng Swap: bây giờ đã có dung lượng: Swap: 4096 0 4096
Swap của bạn đang chạy, nhưng nếu bạn khởi động lại (reboot) VPS, nó sẽ biến mất. Bước này đảm bảo Swap sẽ tự động được kích hoạt mỗi khi VPS khởi động.
Chúng ta cần thêm file Swap vào tệp cấu hình /etc/fstab.
Trước khi sửa, hãy sao lưu file này đề phòng gõ nhầm: sudo cp /etc/fstab /etc/fstab.bak
Sau đó, dùng lệnh echo để thêm dòng cấu hình vào cuối file fstab một cách an toàn:
Bash
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Lệnh này tự động thêm dòng /swapfile none swap sw 0 0 vào cuối file /etc/fstab.
Vậy là hoàn tất! Bạn đã thành công thiết lập Swap trên VPS của mình.
Bạn đã có Swap, nhưng bạn có thể tối ưu khi nào hệ thống nên dùng nó. Việc này được điều khiển bởi một thông số gọi là swappiness.
Swappiness là một thông số trong Linux, giá trị từ 0 đến 100, quyết định mức độ "hăng hái" của hệ thống khi sử dụng Swap.
Swappiness = 100: Hệ thống sẽ dùng Swap rất sớm, ngay cả khi còn nhiều RAM trống (Không tốt!).
Swappiness = 0: Hệ thống sẽ chỉ dùng Swap khi RAM vật lý đã cạn kiệt (gần như không bao giờ dùng).
Swappiness = 60: Đây là giá trị mặc định trên hầu hết các bản phân phối (như Ubuntu). Giá trị này tốt cho máy tính để bàn (desktop) nhưng không tốt cho máy chủ (VPS).
Đối với VPS và máy chủ, chúng ta muốn hệ thống ưu tiên sử dụng RAM vật lý (rất nhanh) và chỉ dùng Swap (chậm hơn) khi thực sự cần thiết (để tránh OOM Killer).
Vì vậy, một giá trị swappiness thấp được khuyến nghị. Khuyến nghị: vm.swappiness = 10
Giá trị "10" là một sự cân bằng hoàn hảo: hệ thống sẽ ưu tiên RAM, nhưng vẫn biết cách sử dụng Swap khi cần để duy trì sự ổn định.
Đầu tiên, kiểm tra giá trị hiện tại: cat /proc/sys/vm/swappiness (Thường sẽ là 60)
Thay đổi giá trị tạm thời (sẽ mất khi reboot): sudo sysctl vm.swappiness=10
Để thay đổi vĩnh viễn, bạn cần sửa file /etc/sysctl.conf: Mở file bằng nano (hoặc trình soạn thảo bạn thích): sudo nano /etc/sysctl.conf
Cuộn xuống cuối file và thêm dòng sau vào:
Bash
vm.swappiness = 10
Lưu file và thoát (Trong nano, nhấn Ctrl+X, chọn Y, rồi Enter).
Giá trị này sẽ tự động được áp dụng sau khi bạn reboot VPS.
Như đã đề cập ở trên, bạn có hai lựa chọn: Swap File và Swap Partition.
Swap Partition (Phân vùng Swap): Là một phân vùng ổ cứng riêng biệt, chỉ dùng cho Swap. Đây là cách làm truyền thống.
Nhược điểm: Cứng nhắc. Nếu bạn muốn tạo Swap 2GB, sau này muốn tăng lên 4GB sẽ cực kỳ phức tạp, gần như phải cài lại VPS.
Swap File (Tập tin Swap): Là một file nằm trong hệ thống file của bạn (ví dụ /swapfile).
Ưu điểm: Cực kỳ linh hoạt. Bạn có thể dễ dàng tạo thêm, xóa bớt, hoặc thay đổi kích thước file Swap mà không ảnh hưởng đến hệ thống.
Kết luận: Đối với VPS, hãy luôn luôn sử dụng Swap File. Cách làm này hiện đại, linh hoạt và hiệu suất gần như tương đương với Swap Partition trên các hệ thống và ổ cứng SSD hiện nay.
Đây là một lo lắng phổ biến từ 10 năm trước, khi SSD còn mới. Đúng là Swap làm tăng số lần Ghi (Write) lên ổ cứng. Tuy nhiên, ổ cứng SSD hiện đại (cả ở các nhà cung cấp VPS) có độ bền (Endurance) rất cao và các thuật toán san bằng độ mòn (wear-leveling) tiên tiến.
Việc thiết lập Swap trên VPS với swappiness = 10 (chỉ dùng khi cần) sẽ gây ra một lượng Ghi không đáng kể. Sự ổn định mà Swap mang lại quan trọng hơn nhiều so với nỗi lo "hại SSD" (vốn đã không còn là vấn đề lớn).
Rất dễ dàng nếu bạn dùng Swap File. Giả sử bạn muốn tăng từ 4GB lên 8GB:
Tắt file Swap hiện tại: sudo swapoff /swapfile
Tạo file 8GB mới: sudo fallocate -l 8G /swapfile
Bảo mật file: sudo chmod 600 /swapfile
Định dạng lại: sudo mkswap /swapfile
Bật lại: sudo swapon /swapfile
Nếu bạn nâng cấp VPS lên gói RAM rất lớn (ví dụ 32GB) và không cần Swap nữa:
Tắt Swap: sudo swapoff /swapfile
Xóa dòng cấu hình trong /etc/fstab (mở file và xóa dòng /swapfile ...)
Xóa file: sudo rm /swapfile
Việc hiểu rõ thiết lập Swap trên VPS là gì và thực hiện đúng các bước là một trong những kỹ năng quản trị hệ thống cơ bản nhưng quan trọng nhất. Swap không phải là một "phép màu" thay thế hoàn toàn cho việc nâng cấp RAM.
Tuy nhiên, Swap là một "tấm lưới bảo hiểm" vô giá. Với chi phí là vài GB dung lượng ổ cứng, bạn nhận lại sự ổn định, giúp VPS (đặc biệt là VPS cấu hình thấp) "sống sót" qua các đợt tải cao đột ngột mà không làm sập các ứng dụng quan trọng.