Swap thường được gọi là RAM ảo, nó được trích một phần từ ổ đĩa cứng khi bộ nhớ RAM vật lý đã hết. Swap được dùng trên các hệ điều hành Linux CentOS, Ubuntu và cả trên Windows. Khi máy chủ sử dụng hết RAM vật lý, các trang web hoặc ứng dụng của bạn sẽ tự động chuyển sang sử dụng bộ nhớ Swap. Tuy nhiên, chúng ta không nên lạm dụng Swap bởi bộ nhớ của nó được trích từ ổ đĩa nên sẽ chậm hơn RAM vật lý.
Khi nào cần sử dụng Swap?
Swap rất cần thiết trong các hệ điều hành phổ biến hiện nay. Theo kinh nghiệm của chúng tôi thì tất cả Vps/ Dedicated server cấu hình cao hay thấp cũng nên sử dụng swap, đôi khi swap vẫn chạy song song với RAM vật lý. Đặc biệt các máy chủ có cấu hình thấp, một khi bộ nhớ RAM vật lý hết thì các ứng dụng hoặc trang web của bạn sẽ không thể truy cập được, có thể xảy ra tình trạng mất dữ liệu và thường xuất hiện lỗi “Establishing a Database Connection”.
Điều kiện để tạo Swap
- Một Vps/ Dedicated Server mới
- Hệ điều hành Ubuntu/ Debian/ CentOS
- RAM tối thiểu 500MB
- HDD/ SSD tối thiểu 10GB
- Quyền đăng nhập Root
Trong bài viết này, chúng tôi sẽ giới thiệu cách tạo một tệp Swap trên các hệ điều hành CentOS 6/7/8 và Ubuntu 16.04/18.04/20.04.
Kiểm tra hệ thống máy chủ
Trước khi tạo swap chúng ta phải chắc chắn rằng ổ đĩa cứng còn thừa nhiều dung lượng trống, và tệp swap chưa được cài đặt sẵn trên máy chủ. Các bước sau đây giúp chúng ta xác nhận thông số hệ thống máy chủ của bạn.
Kiểm tra dung lượng ổ đĩa
Để kiểm tra dung lượng ổ đĩa:
# df-h
Kết quả trả về:
root@k3host:~# df -h Filesystem Size Used Avail Use% Mounted on udev 447M 0 447M 0% /dev tmpfs 99M 1.1M 98M 2% /run /dev/vda1 24G 5.7G 17G 26% / tmpfs 491M 168K 491M 1% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup
Như hình trên, dung lượng trống của ổ đĩa là 17G, đủ để tạo swap.
Kiểm tra Swap
Một số nhà cung cấp Vps thường cài đặt sẵn swap nên chúng ta phải kiểm tra xem swap đã có trên máy chủ hay chưa.
Để kiểm tra tình trạng swap:
# sudo swapon -s
Kết quả trả về:
root@k3host:~# sudo swapon -s Filename Type Size Used Priority root@k3host:~#
Thông số trả về như hình trên thì swap hiện chưa có sẵn trên máy chủ, chúng ta có thể tạo swap.
Thực hiện các bước tạo Swap
Sau khi hoàn tất kiểm tra hệ thống máy chủ, công việc chính của chúng ta bây giờ là tạo swap.
Tạo Swap
Để tạo một tệp swap với dung lượng 2GB:
# dd if=/dev/zero of=/swapfile count=2048 bs=1MiB
Kết quả trả về:
root@k3host:~# swapon -s root@k3host:~# dd if=/dev/zero of=/swapfile count=2048 bs=1MiB 2048+0 records in 2048+0 records out 2147483648 bytes (2.1 GB, 2.0 GiB) copied, 5.82565 s, 369 MB/s root@k3host:~#
Vậy là đã tạo xong tệp swap với dung lượng 2GB rồi. Bạn có thể thay đổi giá trị count=2048 phù hợp với cấu hình máy chủ. Dung lượng swap tối đa chỉ nên gấp đôi RAM vật lý.
Tạo phân vùng Swap
Sau khi tạo xong tệp swap, chúng ta cần tạo phân vùng cho swap:
# mkswap /swapfile
Kết quả trả về:
root@k3host:~# mkswap /swapfile mkswap: /swapfile: insecure permissions 0644, 0600 suggested. mkswap: /swapfile: warning: wiping old swap signature. Setting up swapspace version 1, size = 2 GiB (2147479552 bytes) no label, UUID=e0dd890d-cb9b-42a1-9c15-aea81ab10046 root@k3host:~#
Như kết quả trên chúng ta đã tạo được phân vùng cho swap.
Kích hoạt Swap
Để kích hoạt swap:
# swapon /swapfile
Bỏ qua thông báo lỗi ở bước này nếu có.
Kiểm tra lại tình trạng Swap
Kiểm tra lại tình trạng swap:
root@k3host:~# swapon -s Filename Type Size Used Priority /swapfile file 2097148 93184 -2 root@k3host:~#
Như hình trên có nghĩa là swap đã được tạo thành công.
Thiết lập tự động kích hoạt Swap
Thiết lập tự động kích hoạt mỗi khi reboot lại máy chủ:
# nano /etc/fstab
Thêm đoạn mã này vào cuối dòng:
/swapfile swap swap sw 0 0
Như hình bên dưới:
# /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # ## / was on /dev/vda1 during curtin installation /dev/disk/by-uuid/45827384-b3827-47e0-a202-9055e53a6678 / ext4 defaults 0 1 /swapfile swap swap sw 0 0
Sau đó nhấn tổ hợp phím ctrl+ O và nhấn Enter để lưu lại, bấm ctrl+ X để thoát.
Bảo mật Swap
Để bảo mật swap, chúng ta chỉ cấp quyền đọc/ ghi cho Root:
# chown root:root /swapfile
# chmod 0600 /swapfile
Tham số Swappiness
Tham số swappiness cho biết thời điểm hệ thống sẽ chuyển từ bộ nhớ RAM vật lý sang bộ nhớ tạm swap. Giá trị của swappiness dao động từ 0 đến 100 và mặc định là 30.
- swappiness = 0: giá trị bằng 0 thì sẽ hệ thống sẽ không sử dụng swap.
- swappiness = 60: giá trị bằng 60 thì hệ thống sẽ sử dụng khi RAM vật lý còn 60%.
- swappiness = 100: giá trị bằng 100 thì hệ thống sẽ ưu tiên sử dụng swap.
Vì tốc độ xử lý dữ liệu trên RAM vật lý cao hơn so với swap, chúng ta nên đặt giá trị này từ 5-10 để tận dụng tối đa RAM vật lý.
Kiểm tra giới hạn sử dụng Swap
# cat /proc/sys/vm/swappiness
Kết quả tra về:
root@k3host:~# cat /proc/sys/vm/swappiness 60 root@k3host:~#
Như kết quả trên khi sử dụng RAM vật lý đạt mức 60% thì tự động chuyển sang sử dụng swap.
Thiết lập lại thông số Swappiness
Để tận dụng hết RAM vật lý, chúng ta phải thiết lập lại swappiness:
# sudo nano /etc/sysctl.conf
Thêm đoạn mã sau vào cuối dòng:
vm.swappiness = 10
Đặt vào vị trí như hình bên dưới:
# Magic system request Key # 0=disable, 1=enable all, >1 bitmask of sysrq functions # See https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html # for what other values do #kernel.sysrq=438 vm.swappiness = 10
Nếu chúng ta đặt vm.swappiness = 10 thì khi bộ nhớ RAM vật lý còn 10%, hệ thống sẽ tự động chuyển sang sử dụng swap.
Sau khi cấu hình xong, nhấn tổ hợp phím ctrl+ O và nhấn Enter để lưu lại, bấm ctrl+ X để thoát.
Khởi động lại máy chủ:
# reboot
Kiểm tra lại thông số Swappiness
Kiểm tra lại thông số swappiness:
# cat /proc/sys/vm/swappiness
Kết quả trả về:
root@k3host:~# cat /proc/sys/vm/swappiness 10 root@k3host:~#
Như hình trên, chúng ta đã hoàn thành việc cấu hình swappiness ở mức 10.
Thay đổi dung lượng swap
Để thay đổi dung lượng swap, chúng ta cần Tắt và Xóa swap, sau đó lặp lại các bước trên.
1. Tắt Swap:
# sudo swapoff /swapfile
2. Xóa Swap:
# sudo rm -f /swapfile
3. Tạo lại Swap có dung lượng 4GB
# sudo dd if=/dev/zero of=/swapfile bs=1024 count=4096k
4. Tạo phân vùng cho Swap:
# sudo mkswap /swapfile
5. Kích hoạt Swap:
# sudo swapon /swapfile
6. Bảo mật Swap:
# chown root:root /swapfile
# sudo chmod 600 /swapfile
7. Kiểm tra lại tình trạng Swap:
# sudo swapon -s
Các thiết lập khác vẫn được giữ nguyên nên bạn không cần phải làm lại nữa.
Kết luận !
Ngoài việc tạo swap, để tránh tình trạng máy chủ nhanh chóng bị ngốn hết RAM và gây ra tình trạng quả tải, bạn nên:
- Tối ưu website
- Sử dụng Cache
- Sử dụng CDN
- Nâng cao các biện pháp phòng chống DDoS
Vậy là đã kết thúc quá trình tạo Swap trên CentOS/ Ubuntu. Nếu có ý kiến đóng góp, vui lòng để lại bình luận bên dưới.