Trong bài hướng dẫn này mình sẽ chỉ các bạn cách tạo và kích hoạt Swap trên Linux.

I. Swap là gì?

Swap hay còn được gọi là RAM ảo, được sử dụng để hỗ trợ lưu trữ dữ liệu vào bộ nhớ đĩa cứng khi bộ nhớ vật lý (RAM) đã đầy. Đôi khi Swap cũng được dùng song song để tăng dung lượng bộ nhớ đệm kể cả khi bộ nhớ vật lý vẫn chưa sử dụng hết. Swap thường mặc định được dùng trên các hệ điều hành Linux, Ubuntu hoặc CentOS.

II. Khi nào chúng ta nên sử dụng Swap?

Một trong những trường hợp quan trọng cần đến Swap là khi hệ thống của bạn bị tràn bộ nhớ vật lý (RAM).

Có thể hiểu một cách đơn giản là: bạn không bao giờ có thể lường trước được dung lượng bộ nhớ cho tất cả chương trình trên hệ điều hành. Vì vậy, khi sự cố xảy ra (tràn bộ nhớ RAM), Swap sẽ làm nhiệm vụ duy trì tất cả các hoạt động bình thường dù tốc độ có phần chậm hơn đáng kể thay vì dừng cả hệ thống khiến dữ liệu dễ bị hỏng do chưa được ghi vào đĩa cứng.

III. Khi nào chúng ta không cần sử dụng Swap?

Trong trường hợp máy chủ của bạn có đủ bộ nhớ RAM hoặc không yêu cầu sử dụng không gian Swap hoặc việc có Swap làm giảm đáng kể hiệu suất hệ thống của bạn, thì bạn nên xem xét việc tắt phân vùng Swap.

Nếu bạn có nhu cầu vô hiệu hóa Swap các bạn có thể tham khảo bài hướng dẫn sau.

IV. Hướng dẫn tạo và kích hoạt SWAP trên Linux

Để tạo và kích hoạt SWAP trên Linux chúng ta thực hiện theo 3 bước sau.

Bước 1: SSH vào hệ thống Linux của bạn

Để tạo và kích hoạt SWAP trên Linux, đầu tiên chúng ta cần SSH hoặc truy cập VPS hoặc máy chủ của bạn với quyền root trước. Nếu bạn chưa biết cách SSH vào VPS hoặc Server của bạn thì bạn có thể tham khảo bài viết hướng dẫn sau:

Sau khi đã SSH thành công chúng ta tiếp tục với bước 2 kiểm tra Swap.

Bước 2: Kiểm tra Swap

Trước khi tiến hành tạo tệp tin Swap, chúng ta cần kiểm tra xem hiện tại hệ thống hiện tại đã kích hoạt Swap hay chưa bằng cách chạy lệnh sau:

AZDIGI Tutorial
swapon -s

Nếu sau khi chạy lệnh mà không có thông tin nào hiển thị ra có nghĩa là máy chủ của chúng ta chưa kích hoạt Swap.

how-to-enable-kich-hoat-swap-tren-linux
Hệ thống chưa kích hoạt Swap.

Bước 3: Kiểm tra dung lượng đĩa trống

Kiểm tra dung lượng đĩa trống để chúng ta cân nhắc tạo dung lương tệp tin Swap ở bước sau. Để kiểm tra dung lượng đĩa trống chúng ta sử dụng lệnh sau.

AZDIGI Tutorial
df -h

Dung lượng trống của mình còn đến 31GB nên khá thoải mái để tạo Swap. Vì sau khi tạo Swap, dung lượng máy chủ của bạn sẽ mất tương ứng mới mức dụng lượng mà bạn đã cấp cho Swap.

how-to-enable-kich-hoat-swap-tren-linux
Kiểm tra dung lượng máy chủ Linux với lệnh df -h.

Bước 4: Tạo tệp tin Swap

Đối với máy chủ của mình chỉ có 4GB RAM nên mình sẽ tạo phân vùng Swap từ 1GB đến 2GB là phù hợp.

Ở đây mình sẽ sử dụng lệnh dd để tạo tệp tin Swap với dung lượng là 2GB.

AZDIGI Tutorial
dd if=/dev/zero of=/mnt/swapfile bs=1024 count=2048k

Lệnh trên sẽ tạo tệp tin Swap có dung lượng 2GB. Bạn có thể thay count=2048k bằng count=1024k… để tạo Swap dung lượng 1GB. Dung lượng Swap tối đa chỉ nên gấp đôi RAM vật lý.

how-to-enable-kich-hoat-swap-tren-linux
Tạo tệp tin Swap với dung lượng 2GB.

Sau khi đã tạo xong tệp tin Swap, chúng ta cần tạo một phân vùng cho nó ở bước 5.

Bước 5: Tạo phân vùng Swap và kích hoạt Swap trên Linux

Để tạo phân vùng Swap các bạn hãy chạy lệnh sau.

AZDIGI Tutorial
mkswap /mnt/swapfile
how-to-enable-kich-hoat-swap-tren-linux
Tạo phân vùng Swap trên Linux.

Sau đó chúng ta tiếp tục kích hoạt Swap trên Linux với lệnh bên dưới.

AZDIGI Tutorial
swapon /mnt/swapfile

Bạn sẽ nhận được cảnh báo là nên phân quyền là 0600 để bảo mật hơn cho phân vùng này vì mặc định khi khởi tạo thư mục sẽ có quyền 0644Bạn hãy bỏ qua vì chúng ta sẽ thực hiện phân quyền lại ở bước sau.

how-to-enable-kich-hoat-swap-tren-linux
Cảnh báo bảo mật khi kích hoạt Swap mà thư mục đang ở quyền khác với 0600.

Kiểm tra lại trạng thái Swap như ở bước 2 các bạn sẽ thấy mọi thứ bây giờ đã khác.

AZDIGI Tutorial
swapon -s
how-to-enable-kich-hoat-swap-tren-linux
Kích hoạt Swap trên Linux thành công.

Tiếp tục chúng ta cần thiết lập phân vùng Swap tự động kích hoạt sau khi khởi động lại hệ thống.

AZDIGI Tutorial
echo /mnt/swapfile none swap defaults 0 0 >> /etc/fstab

Tiếp tục thực hiện thiết lập bảo mật cho phân vùng Swap với hai lệnh sau.

AZDIGI Tutorial
chown root:root /mnt/swapfile
chmod 0600 /mnt/swapfile

Giải thích hai lệnh trên:

  • Lệnh 1: Phân quyền chủ sở hữu nhóm đều thuộc của root.
  • Lệnh 2: Phân quyền chỉ có root mới được phép truy cập và đọc ghi dữ liệu.

Chỉ như vậy là chúng ta đã kích hoạt Swap trên Linux thành công rồi đấy. Tuy nhiên nếu bạn cần phân chia mức độ ưu tiên sử dụng Swap khi mức ram đạt giới hạn thì hãy theo dõi tiếp phần còn lại của bài viết nhé.

V. Cấu hình Swappiness

Swappiness là mức độ ưu tiên sử dụng Swap của hệ thống Linux. Khi lượng RAM trống còn lại bằng giá trị của Swappiness (tính theo tỷ lệ phần trăm) thì máy chủ Linux sẽ chuyển qua sử dụng. Ví dụ máy chủ của bạn chỉ còn trống 10% RAM và Swappiness được đặt giá trị là 10 thì máy chủ sẽ chuyển sang sử dụng Swap.

Vì tốc độ của RAM nhanh hơn tốc độ đĩa cứng nhiều lần nên khi dữ liệu được ghi/đọc từ Swap sẽ cho tốc độ chậm hơn khi sử dụng trên RAM rất nhiều. Nên bạn hãy cân nhắc tinh chỉnh Swappiness dao động từ 5 đến 10 là phù hợp.

Lưu ý: Số càng cao thì máy chủ càng thường xuyên sử dụng Swap nhiều hơn, đồng nghĩa đĩa cứng sẽ phải đọc ghi nhiều hơn và mau chóng xuống cấp hơn.

Swappiness sẽ có giá trị trong khoảng 0 – 100.

Dưới đây là một số kịch bản thông thường được sử dụng:

  • swappiness = 0: swap chỉ được dùng khi RAM được sử dụng hết.
  • swappiness = 10: swap được sử dụng khi RAM còn trống 10%.
  • swappiness = 60: swap được sử dụng khi RAM còn trống 60%.
  • swappiness = 100: swap được ưu tiên như là RAM.

Các bạn có thể kiểm tra thông số Swappiness bằng lệnh sau:

AZDIGI Tutorial
cat /proc/sys/vm/swappiness

Dưới đây là kết quả trên máy chủ của mình.

how-to-enable-kich-hoat-swap-tren-linux
Khi lượng RAM vật lý đạt 70% thì Linux chuyển sang sử dụng Swap.

Và để thay đổi giá trị này về 10 chúng ta sử dụng lệnh sau:

AZDIGI Tutorial
sysctl vm.swappiness=10

Sau đó kiểm tra lại với lệnh kiểm tra bạn có thể thấy thông Swappiness số đã được thay đổi.

how-to-enable-kich-hoat-swap-tren-linux
Khi lượng RAM vật lý đạt 70% thì Linux mới chuyển sang sử dụng Swap.

Tuy nhiên việc sử dụng lệnh này chỉ là cấu hình tạm thời. Và sau khi khởi động lại máy chủ thông số sẽ về mặc định.

Để đảm bảo giữ nguyên thông số này mỗi khi khởi động lại máy chủ bạn cần điều chỉnh tham số vm.swappiness ở cuối file /etc/sysctl.conf, trường hợp bạn máy chủ của bạn không có dòng này các bạn hãy thêm thủ công vào.

how-to-enable-kich-hoat-swap-tren-linux

Sau đó bạn hãy lưu lại tệp tin này và khởi động lại máy chủ của mình để nhận thông số mới. Chờ một lát để máy chủ khởi động lại các bạn có thể kiểm tra lại với các lệnh sau.

AZDIGI Tutorial
swapon -s
cat /proc/sys/vm/swappiness

Dưới đây là kết quả sau khi mình khởi động lại máy chủ.

how-to-enable-kich-hoat-swap-tren-linux

Trong một vài trường hơp máy chủ CentOS 7 kể cả khi bạn thay đổi thông số vm.swappiness ở cuối tệp tin /etc/sysctl.conf cũng không tác dụng sau khi khởi động lại máy chủ thì có thể máy chủ đó đang có tune profile sẽ tự động ghi đè thông số vm.swappiness mỗi khi khởi động lại.

Để kiểm tra profile nào đang ghi đè thì các bạn sử dụng lệnh sau:

AZDIGI Tutorial
grep vm.swappiness /usr/lib/tuned/*/tuned.conf

Kết quả có thể sẽ như sau:

how-to-enable-kich-hoat-swap-tren-linux

Theo như kết quả thì bạn hãy chỉnh sửa thông số vm.swappiness tại tệp tin /usr/lib/tuned/virtual-guest/tuned.conf thành 10 theo ý của bạn. Và cuối cùng vẫn là khởi động lại máy chủ.

VI. Tổng kết

Việc kích hoạt Swap trên Linux sẽ giúp máy chủ của bạn giảm thiểu rất nhiều rủi ro khi dung lượng bộ nhớ vật lý bị đầy (RAM). Tuy nhiên chúng ta cũng đừng nên lạm dụng Swap quá nhiều vì sẽ gây ra tình trạng chậm máy chủ cũng như làm cho đĩa cứng phải đọc/ghi liên tục, gây ra tình trạng xuống cấp bộ nhớ lưu trữ.

Hy vọng bài viết này sẽ giúp ích được cho các bạn. Chúc các bạn có thể thực hiện thành công. Xem thêm các bài viết hữu ích về VPS Linux tại đường dẫn sau: